Ejemplos de controlador de vista de contenedor [cerrado]

94

¿Alguien puede señalarme algún buen ejemplo de creación de un controlador de vista personalizado como un controlador de vista de contenedor? La única documentación que puedo encontrar son un par de párrafos en la Referencia de clase de UIViewController . Siento que necesito un poco más de información que eso y una implementación de ejemplo estaría bien. Google no ha encontrado nada en absoluto.

Estoy específicamente interesado en el método:

transitionFromViewController:toViewController:duration:options:animations:completion:
Distracción
fuente
¿Encontraste otras fuentes para esto además del hipercrypt mencionado?
John Estropia
1
Aún no. Voy a tener otra excavación hoy más tarde si tengo tiempo. Parece extraño que haya tan poca información al respecto dado lo importante y útil que es. Me pregunto si tiene errores y estará mejor documentado cuando se mejore.
distracciones
3
Esto es extremadamente confuso para mí. Por ejemplo, la vista solo puede tener un controlador integrado. ¿Qué pasa si desea cambiar el controlador en esa vista de contenedor?
user4951
@JanakNirmal Muy agradecido.
distracciones
¿Puedo ocultar la vista del contenedor?
Maulik shah

Respuestas:

51

Lo mejor que he encontrado hasta ahora es la sesión 102 de vídeo de la sesión de la WWDC 2011 : Implementación de la contención de UIViewController .

hipercripta
fuente
1
Ídem. No es mi ejemplo de código de demostración favorito, pero implementa adecuadamente los contenedores de VC, así como la administración de la memoria; es realmente importante que sus controladores de vista infantil se liberen cuando ya no estén visibles.
memmons
1
Desafortunadamente, la demostración de cómo usar ContainerViewController no funcionó porque no tenía la configuración de correo electrónico en su iPad :-(
Ken M. Haggerty
¿Esa sesión tiene una muestra de código?
user4951
¿Tiene el código de muestra ahora? Lo necesito porque lo he intentado mucho pero todavía no tengo solución.
iPhone programáticamente
37

Además de la sesión de video de la sesión de WWDC 102 - Implementación de la contención de UIViewController que el hipercrypt ya mencionó, la sesión de Apple WWDC 2012 sobre "La evolución de los controladores de vista en iOS" también cubre este tema y el código de ejemplo es parte del paquete de código de muestra:

https://developer.apple.com/devcenter/download.action?path=/wwdc_2012/wwdc_2012_sample_code/wwdc_2012_session_code.dmg

También hay un ejemplo aquí: https://github.com/toolmanGitHub/stackedViewControllers

JosephH
fuente
2
+1 mencionando dónde conseguir ese maldito paquete de código. Lo he estado revisando.
user4951
6
+1 nuevamente, ¿por qué o por qué Apple no puede poner el código de las sesiones de la WWDC en sus páginas de miembros?
axello
+1, ¿le importaría compartir cómo obtener esta ruta de código fuente?
Janak Nirmal
1
@JanakNirmal, ¿qué código fuente tienes problemas para conseguir? Para obtener el código WWDC, simplemente siga el enlace dmg e inicie sesión con su ID de desarrollador de Apple.
JosephH
17
- (void)viewDidLoad{
    [super viewDidLoad];

    // I put self in a Navigation VC so we can use its right navigationbar 
    // item for triggering the transition
    self.navigationItem.rightBarButtonItem = 
     [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit 
                                                    target:self 
                                                    action:@selector(button:)] 
                                                                  autorelease];

    // create test1 and test2 instance (subclass UIViewController and 
    // also need to define their own nibs)
    vc1 = [[test1 alloc]initWithNibName:@"test1" bundle:nil];
    vc2 = [[test2 alloc]initWithNibName:@"test2" bundle:nil];

    //add to the container vc which is self    
    [self addChildViewController:vc1];
    [self addChildViewController:vc2];

    //the entry view (will be removed from it superview later by the api)
    [self.view addSubview:vc1.view];
}

esta IBAction desencadena la transición entre dos VC:

-(IBAction)button:(id)sender {
    [self transitionFromViewController:vc1 
                      toViewController:vc2 
                              duration:0.5    
                               options:UIViewAnimationOptionTransitionCurlDown 
                            animations:nil 
                            completion:nil];
}
sonnywang
fuente
1
Este es un gran ejemplo. Pero la gestión de la memoria en este caso se puede mejorar: stackoverflow.com/a/8453677/849616 para una solución más adecuada.
Vive el
1
No es que te equivoques. Pero [self addChildViewController: vc1]; no tiene sentido. El Container VC puede tener VARIOS Controladores de vista de contenedores.
user4951
@Vive He llegado a un punto en mi proyecto en el que me preocupa la gestión de la memoria. ¿Podría decirme qué hace mejor en particular el enlace que publicó en términos de gestión de la memoria? Soy muy nuevo y me cuesta ver las discrepancias
jacobronniegeorge
10

¿Podría esto:

http://subjective-objective-c.blogspot.com/2011/08/writing-high-quality-view-controller.html

¿Ser suficiente para tus necesidades?

Rui Peres
fuente
4
En realidad, ya lo había encontrado, pero desafortunadamente está escrito sobre Ios4, pero 5 ha realizado cambios significativos. Apple ahora admite explícitamente la creación de contenedores de controladores de vista personalizados, aunque parece que no quieren ayudarnos a averiguar cómo usarlos. Pero gracias.
distracciones
¿Puedes mostrarme dónde dicen eso? Sin dudar de ti, solo por curiosidad, porque yo también he estado luchando con eso.
Rui Peres
4
Sin preocupaciones. Revisé el código para sus clases de contenedor y ninguno de ellos usa ninguno de los siguientes métodos: addChildViewController :, removeFromParentViewController, transitionFromViewController: toViewController: duration: options: animations: complete :, willMoveToParentViewController: y didMoveToParentViewController: que se mencionan en el actualizado Documentación de ios5 para UIViewController.
distracciones