Acabo de ver un 2011 WWDC presentación sobre «la Aplicación de UIViewController de Contención» (aquí un enlace para ver el video)

Se mencionó que estas dos formas de agregar viewControllers a la pantalla, y me gustaría alguna aclaración sobre las mejores prácticas…

addChildViewController /removeFromParentViewController

se utiliza con un @property (nonatomic, readonly) NSArray *childViewControllers y [self transitionFromViewController:currentView toViewController:nextView duration: options: animations: completion:];

pushViewController: animación: /popViewControllerAnimated

realmente rápidamente desnatada pasado esto en la presentación

En mis aplicaciones que yo uso de todo personalizado viewControllers, y hasta el día de hoy siempre me he manejado con:

[nextController performSelector:@selector(setDelegate:) withObject:self];
[currentPageController.view removeFromSuperview];
[self.view addSubview:nextController.view];

Pero ahora entiendo que esta es una mala práctica, y me pregunto, ¿cuál es la manera correcta de usar «addChildViewController» ¿y cuál es la manera correcta de usar «pushViewController»?

Realmente aprecio sus pensamientos sobre el asunto!

InformationsquelleAutor RanLearns | 2011-11-10

1 Comentario

  1. 73

    Sí, pushViewController: es para la navegación de los controladores que gestionar una pila de vista de los controladores. addChildViewController: por otro lado, es parte de un iOS 5 característica llamada «controlador de vista de la contención».

    La idea básica detrás de esto es que usted puede incorporar su punto de vista de los controladores en otro punto de vista de los controladores de su propio (por ejemplo, al trasladar una aplicación de iPhone para el iPad) y por lo tanto fácilmente hacer su propia implementación de las cosas, como la navegación a los controladores, a la vista de división de controladores, etc.

    Un problema con una aplicación como la que muestran es que sólo se ocupan de las vistas. Vista de controlador de eventos como cambios de orientación no se pasa correctamente hacia abajo en la jerarquía. Controlador de vista de la contención trata de asegurarse de que todos los contenidos de vista de los controladores recibirá los mensajes adecuados, también.

    Mirando su implementación también deben pensar acerca de lo que realmente se quiere lograr con esto. Un controlador de navegación puede ser la cosa correcta o incluso podría mostrar el siguiente controlador de forma modal (ver https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/PresentingaViewController.html) Una bonificación cuando el uso de estos métodos (por ejemplo, controladores de navegación y modal puntos de vista) es que el usuario ya está familiarizado con esas técnicas de navegación.

    En cualquier caso, https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/ es una buena lectura acerca de cómo hacer la transición entre la vista de los controladores.

    Cuando se utiliza controlador de vista de la contención que, básicamente, tienen que añadir la vista a la que contiene la vista, como de costumbre (esto debe hacerse incluso si el controlador es agregado). A continuación, utilice addChildViewController: para agregar el niño controlador de vista a los alrededores de uno. Usted también tiene que notificar al niño controlador de didMoveToParentViewController: que ha sido puesto en otro controlador. También puede utilizar transitionFromViewController:toViewController: a cambio de un controlador de vista de otro, opcionalmente dando una animación.

    • Cuando la incorporación de un controlador de vista en un contenedor de vista controlador usando el nuevo «embed»-relación en Xcode 4.5 es la aplicación de addChildViewController u otros métodos requieren todavía?
    • Unfortunaly la documentación en esto es muy escasa, pero me gustaría suponer que addChildViewController: ya está siendo llamado para usted.
    • De acuerdo con el doc podemos leer que didMoveToViewController: es llamado automáticamente cuando se realiza una addChildViewController:. Sólo es necesario realizar un willMoveToViewController cuando se llama a un removeChildViewController
    • ¿Dónde se encuentra exactamente en el doc dice que?
    • Que hay de malo, al contrario es necesario. A partir de la documentación: «cada vez que desee agregar un nuevo punto de vista, añadir el nuevo controlador de vista como un niño en primer lugar.» Enlace: developer.apple.com/library/ios/#featuredarticles/… Sección: «Adición y Eliminación de un Niño»
    • Oops. Disculpas. DTs es correcta. He mencionado es completamente a la inversa. Comentario eliminado.

Dejar respuesta

Please enter your comment!
Please enter your name here