Sto scrivendo un controller di visualizzazione per aggiungere un nuovo elemento alla mia app. Si adatta perfettamente a MonoTouch.Dialog, in quanto può essere fatto facilmente con un'interfaccia basata su tabella, con un campo per proprietà rilevante del mio articolo.Come si incapsula una vista di MonoTouch.Dialog in un controller di visualizzazione?
Questo è il codice che ho attualmente in mostra la vista dell'elemento aggiuntivo (semplificato, ma l'idea di base rimane):
Item item = new Item();
TapHandler handler = new TapHandler();
BindingContext bc = new BindingContext(handler, item, "Add Item");
DialogViewController dv = new DialogViewController(bc.Root, true);
this.NavigationController.PushViewController(dv, true);
Mentre che funziona, io preferirei se potevo incapsulare i dettagli della vista nel proprio controller della vista, in modo che il codice potrebbe assomigliare a questo:
UIViewController controller = new AddItemViewController();
this.NavigationController.PushViewController(controller, true);
Tuttavia, non riesco a capire come implementare questa. Ho pensato che la cosa logica da fare sarebbe stata creare una sottoclasse di DialogViewController
. Tuttavia, tutti i costruttori di DialogViewController
richiedono un RootElement
. Per ottenere ciò, è necessario innanzitutto creare lo BindingContext
. Poiché non è possibile eseguire alcun codice prima di chiamare il costruttore base, non funziona.
Il secondo approccio è stato quello di implementare sottoclasse di UIViewController
, creare il DialogViewController
, e l'aggiungere il controller della vista finestra come un bambino della mia sottoclasse utilizzando this.AddChildViewController(dv)
e this.View.AddSubView(dv.View)
. Mentre questo funziona inizialmente, se si dispone del nuovo controller di visualizzazione in un UINavigationController e si fa clic su un elemento di data, la vista della data viene visualizzata come popup modale anziché nella gerarchia del controller di navigazione. (Questo ha senso, dato che lo DialogViewController
non fa parte della gerarchia NavigationController
in questo disegno).
Da lì sono bloccato. Non sono riuscito a trovare alcun esempio di come usare MonoTouch.Dialog negli esempi. È possibile farlo? O se non lo è, c'è una buona ragione per cui scrivere codice come questo è una cattiva idea?
Grazie, non ho pensato di utilizzare manualmente l'elemento Root nel costruttore. Ho creato la mia risposta che funziona con la reflection api impostando un nuovo elemento Root nel costruttore. –