Nella sessione 102 del WWDC 2011, Apple ha introdotto View Controller Containment, ovvero la possibilità di creare contenitori di controller di visualizzazione personalizzati, analogamente a UITabBarController
, UINavigationController
e simili.Come funziona View Controller Containment in iOS 5?
Ho visto gli esempi più volte. Ci sono una moltitudine di metodi associati a questo modello, ma è stato un po 'difficile individuarli esattamente. Inserirò qui ciò che penso stia succedendo e vedrò se la comunità confermerà o disconosce i miei sospetti.
Scenario 1: Il passaggio da nessun genitore a un nuovo controller di vista padre
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view]; // or something like this.
[vc didMoveToParentViewController:self];
fare le prime due righe devono accadere nell'ordine dato, o possono essere invertiti?
Scenario 2: Passare da un controller di vista genitore a nessun genitore View Controller
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
E 'anche necessario chiamare [vc didMoveToParentViewController:nil]
? Gli esempi nella Sessione 102 non hanno eseguito questo in questo scenario, ma non so se si è trattato di un'omissione o meno.
Scenario 3: Lo spostamento da controller di vista un genitore all'altro
Questo si verificherà probabilmente nel seguente modo, perché la logica di ogni controller vista padre sarà incapsulato.
// In the old parent
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
// In the new parent
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view];
[vc didMoveToParentViewController:self];
Domande
La mia domanda principale è questa: E 'questo il modo View Controller contenimento dovrebbe funzionare, in generale? I meccanismi sopra riportati sono corretti?
È necessario chiamare willMoveToParentViewController
prima di chiamare addChildViewController
? Questo mi sembra l'ordine logico, ma è strettamente necessario?
E 'necessario chiamare didMoveToParentViewController:nil
dopo aver chiamato removeFromParentViewController
?
Il problema era che quando ho provato ad aggiungere il tag ios5, ho premuto per errore enter, che ha aggiunto il post anche se non avevo ancora finito di compilarlo/modificarlo. Ho provato a cancellarlo ma poi ho scoperto che potevo solo * votare * per cancellarlo. –