2011-12-02 25 views
5

Utilizzo del fantastico MonoTouch.dialog in alcuni dei miei progetti ora e una domanda. Ho un RadioGroup che uso per consentire all'utente di selezionare il suo stato di casa, States è un array di stringhe.Chiusura popup quando elemento gruppo radio selezionato

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

Questo funziona bene, e quando seleziono stato appare il popup e prendo il mio stato, ma poi ho dovuto colpire il pulsante Indietro nella barra di navigazione per tornare alla mia schermata principale. C'è un modo per far sparire quel popup quando seleziono una scelta? Dover colpire il pulsante posteriore è fastidioso. O sto semplicemente usando la soluzione sbagliata a questo?

Il mio primo pensiero era di sottoclasse RadioElement e catturare l'evento selezionato, ma poi non ero ancora sicuro di come chiudere il popup di selezione automatica?

risposta

13

Ho avuto lo stesso problema stamattina e volevo anche attivare un evento per la modifica in modo da poter aggiungere un pulsante "annulla" nella finestra di dialogo quando i dati erano stati modificati. Entrambe le attività richiedono la sottoclasse di RadioElement e l'override del metodo Selected. Nota il passaggio extra per assicurarti che la finestra di dialogo NON si chiuda se l'utente fa clic sull'elemento già selezionato: verrà attivato se fai clic su qualcosa anche se è già selezionato, quindi volevo proteggersi da questo: il mio sembra così.

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

Tu sei l'uomo! Grazie mille. Ero vicino, era come chiudere il dialogo che mi mancava. Questo è esattamente ciò di cui avevo bisogno. – russellj

+0

Grande. Penso di poter usare anche questo: P. Russellj puoi contrassegnarlo come la risposta accettata? – Bart

Problemi correlati