2011-12-02 7 views
5

Korzystanie z niesamowitego MonoTouch.dialog w niektórych z moich projektów teraz i zadaj pytanie. Mam grupę RadioGroup, której używam, aby umożliwić użytkownikowi wybranie swojego stanu macierzystego, Stany są tablicą ciągów znaków.Odrzucanie wyskakujących okienek po wybraniu pozycji z grupy RadioGroup

public static RootElement CreateStates() 
    { 
     return new RootElement ("State", new RadioGroup (0)) 
     { 
      new Section ("Choose State") 
      { 
       from x in States 
        select (Element) new RadioElement (x) 
      } 
     }; 
    } 

Działa to dobrze, a kiedy wybrać stan popup pojawia się i mogę odebrać mój stan, ale potem muszę nacisnąć przycisk wstecz na pasku nawigacyjnym, aby wrócić do mojego głównego ekranu. Czy istnieje sposób na odrzucenie tego popupu po wybraniu opcji? Naciskanie przycisku wstecz jest denerwujące. Czy po prostu używam do tego niewłaściwego rozwiązania?

Moja pierwsza myśl polegała na podklasie RadioElement i przechwyceniu wybranego zdarzenia, ale nadal nie wiedziałem, jak zamknąć okno automatycznego wyboru?

Odpowiedz

13

Tego samego dnia spotkałem się z tym samym problemem i chciałem również włączyć zdarzenie dla zmiany, więc mogłem dodać przycisk "anuluj" w oknie dialogowym, w którym edytowano dane. Oba zadania wymagają podklasy RadioElement i nadpisania wybranej metody - należy zwrócić uwagę na dodatkowy krok, aby dialog NIE ZAMKNIĘTO, jeśli użytkownik kliknie już wybrany element - zostanie uruchomiony, jeśli klikniesz na coś, nawet jeśli jest już zaznaczony, więc chciałem zabezpiecz się przed tym - moje wygląda tak.

public class MyRadioElement : RadioElement { 
    // Pass the caption through to the base constructor. 
    public MyRadioElement (string pCaption) : base(pCaption) { 
    } 

    // Fire an event when the selection changes. 
    // I use this to flip a "dirty flag" further up stream. 
    public override void Selected (
     DialogViewController pDialogViewController, 
     UITableView pTableView, NSIndexPath pIndexPath) { 
     // Checking to see if the current cell is already "checked" 
     // prevent the event from firing if the item is already selected. 
     if (GetActiveCell().Accessory.ToString().Equals(
      "Checkmark",StringComparison.InvariantCultureIgnoreCase)) { 
      return; 
     } 

     base.Selected (pDialogViewController, pTableView, pIndexPath); 

     // Is there an event mapped to our OnSelected event handler? 
     var selected = OnSelected; 

     // If yes, fire it. 
     if (selected != null) { 
      selected (this, EventArgs.Empty); 
     } 

     // Close the dialog. 
     pDialogViewController.DeactivateController(true); 
    } 

    static public event EventHandler<EventArgs> OnSelected; 
} 
+0

Jesteś mężczyzną! Dzięki wielkie. Byłem blisko, to było jak zamknąć okno, którego mi brakowało. Dokładnie tego potrzebowałem. – russellj

+0

Świetnie. Myślę, że mogę to również wykorzystać: P. russellj możesz oznaczyć to jako zaakceptowaną odpowiedź? – Bart