2011-12-02 10 views
5

Usando el impresionante monoTouch.dialog en algunos de mis proyectos ahora y tengo una pregunta. Tengo un RadioGroup que utilizo para permitir que el usuario seleccione su estado de origen, States es una matriz de cadenas.Descartar ventana emergente cuando RadioGroup Elemento seleccionado

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

Esto funciona bien, y cuando selecciono estado aparezca la ventana y me recoger mi estado, pero luego tengo que golpear el botón de retroceso en la barra de navegación para volver a la pantalla principal. ¿Hay alguna manera de descartar esa ventana emergente cuando selecciono una opción? Tener que presionar el botón de volver es molesto. ¿O simplemente estoy usando la solución equivocada para esto en conjunto?

Mi primer pensamiento fue subclase RadioElement y atrapar el evento seleccionado, pero aún no estaba seguro de cómo descartar la ventana emergente de selección automática.

Respuesta

13

Me encontré con el mismo problema esta mañana y también quería desencadenar un evento para el cambio para poder agregar un botón "cancelar" en el cuadro de diálogo cuando los datos se habían editado. Ambas tareas requieren que subclass RadioElement y anular el método Selected - tenga en cuenta el paso adicional para asegurarse de que el diálogo NO se cierre si el usuario hace clic en el elemento ya seleccionado - se disparará si hace clic en cualquier cosa incluso si ya está seleccionada, así que quería proteger contra eso - el mío se ve así.

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

¡Eres el hombre! Muchas gracias. Estaba cerca, era cómo cerrar el diálogo que me faltaba. Esto es exactamente lo que necesitaba. – russellj

+0

Genial. Creo que puedo usar esto también: P. russellj ¿Puedes marcar esto como la respuesta aceptada? – Bart

Cuestiones relacionadas