En la sesión 102 de WWDC 2011, Apple introdujo la Contención del controlador de vista, que es la capacidad de crear contenedores de controlador de vista personalizados, análogos a UITabBarController
, UINavigationController
, y similares.¿Cómo funciona la contención de View Controller en iOS 5?
He visto los ejemplos varias veces. Hay una ráfaga de métodos asociados con este patrón, pero fue un poco difícil de resolver exactamente. Voy a publicar aquí lo que creo que está sucediendo y ver si la comunidad confirmará o confirmará mis sospechas.
Escenario 1: Pasar de ningún padre a un nuevo controlador de vista padre
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view]; // or something like this.
[vc didMoveToParentViewController:self];
hacer las dos primeras líneas tienen que ocurrir en el orden dado, o pueden ser invertidos?
Escenario 2: Pasar de un controlador de vista padre a ningún controlador de vista padre
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
¿Es también necesario llamar [vc didMoveToParentViewController:nil]
? Los ejemplos en la sesión 102 no hicieron esto en este escenario, pero no sé si fue una omisión o no.
Escenario 3: Pasar de controlador de vista un padre a otro
Esto probablemente se producirá en la siguiente manera, porque se encapsula la lógica en cada controlador de vista padre.
// 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];
Preguntas
Mi pregunta principal es la siguiente: ¿Es así como vista del controlador de contención debe trabajar, en general? ¿Son correctos los mecanismos anteriores?
¿Es necesario llamar al willMoveToParentViewController
antes de llamar al addChildViewController
? Esto me parece el orden lógico, pero ¿es estrictamente necesario?
¿Es necesario llamar al didMoveToParentViewController:nil
después de llamar al removeFromParentViewController
?
El problema fue que cuando traté de añadir la etiqueta IOS5, me golpeó accidentalmente entrar, lo que sumado al poste a pesar de que yo no había terminado de componer/editarlo. Intenté eliminarlo, pero luego descubrí que solo podía * votar * para eliminarlo. –