que containerview container child ios cocoa interface nested viewcontroller

ios - child - containerview swift



Entendiendo View Controller Nesting en iOS (3)

Esto es definitivamente posible en iOS 4:

Tienes un controlador de vista "A" con su vista:

  • Asigne el controlador de vista "B" que desea tener en su controlador de vista "A"
  • Call (void) addSubview: (UIView *) vista en la vista del controlador de vista "A" con la vista del controlador de vista "B" como parámetro
  • El marco de la vista del controlador de vista "B" está configurado a pantalla completa debido a addSubView, así que cámbielo para colocar la vista donde desee en la vista del controlador de vista "A".
  • Agregue algunas animaciones UIView cuando cambie el marco para tener una buena visualización.

En IOS5 solo use el método en su controlador de vista "A":

  • (void) addChildViewController: (UIViewController *) childController

He estado arrancando mi cabello durante los últimos días tratando de entender este concepto aparentemente básico de desarrollo de iOS:

  • Si quiero tener dos o más controladores de visualización visualizados y utilizables en la misma "pantalla", es esto:

    1. No es aconsejable según el "Un VC de Apple por pantalla de contenido"
    2. Completamente posible mediante la adición de los VC a través del código
    3. Simplemente no hecho En su lugar, use un VC y simplemente agregue un código que imite la funcionalidad de los controladores de vista que desea.

Déjame reformular un poco:

Si quisiera tener, en una aplicación de iPad, una UIView (A) que ocupe una gran parte del lado izquierdo de la pantalla, y una segunda UIView (B) que ocupe el resto del lado derecho de la pantalla, y quise agregar un botón a UIView B que al hacer clic usaría la transición Modal para deslizar una UITableview para reemplazar UIView B, y esta UITableview actuaría como un UITableviewController típico por el cual cuando el usuario escoge un elemento de la tabla, los eventos típicos se envían al controlador de Tableview para insertar un nuevo conjunto de elementos, ¿es esto posible?

Me parece que si ya puedo crear fácilmente dos controladores UIViewControllers, y tengo un botón en una VC, aparecerá la segunda VC, ¿por qué no puedo combinar esta funcionalidad para que una VC tenga dos VC hijos y esos VCs infantiles? Manejar sus propias transiciones modales.

¿O es la mejor práctica en un caso como este simplemente tener un VC que maneje todo, y luego manejar manualmente la animación de las diapositivas de varias vistas después de varios clics en varios elementos de la interfaz de usuario?

Como pueden ver, creo que he leído demasiadas respuestas diferentes y conflictivas a preguntas similares a las que he confundido por completo sobre qué es qué más. Si alguien por ahí entiende a qué me dirijo y puedo dar una explicación o algunos consejos, lo agradeceré.


La Guía de programación de View Controller cubre esto bastante bien.

Un controlador de vista gestiona un conjunto de vistas. Puede tener controladores de vista de contenido y controladores de vista de contenedor / navegación que administran la jerarquía de controladores de vista (ejemplo: el controlador de vista de navegación puede administrar un controlador de vista de lista y un controlador de detalle).

Se trata con más detalle aquí:

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007457

Un controlador de vista administra una parte discreta de la interfaz de usuario de su aplicación. A pedido, proporciona una vista que puede visualizarse o interactuar con. A menudo, esta vista es la vista raíz para una jerarquía de vistas más compleja: botones, interruptores y otros elementos de la interfaz de usuario con implementaciones existentes en iOS. El controlador de vista actúa como el agente de coordinación central para esta jerarquía de vista, manejando los intercambios entre las vistas y cualquier controlador u objeto de datos relevante.

Los controladores de vista múltiple coordinan sus esfuerzos para presentar una única interfaz de usuario unificada.


La respuesta depende de si necesitas soportar iOS 4 o no. Si es así, la respuesta es:

Respuesta número 1: con la excepción de los propios controladores de contenedor de Apple, en particular UITabBarController, UINavigationController, UISplitViewController, UIPageViewController y UIPopoverController (¿falté alguno?) No hay una forma adecuada para tener múltiples controladores de visualización activos en la misma pantalla, administrando diferentes porciones de la vista. Los métodos del controlador de vista, como presentModalViewController, etc., se basan en el supuesto de que hay un único controlador de vista "frontal" que posee toda la pantalla, y si intenta que varios controladores de vista administren diferentes partes de la vista, todo tipo de cosas ruptura, como reenviar eventos de rotación de pantalla y cambiar el tamaño / posicionamiento de las vistas después de una transición de página.

Sin embargo, si solo necesitas soportar iOS 5, la respuesta es:

Respuesta número 2 - ¡No hay problema! Solo asegúrese de que todos los controladores de vista de subpágina estén conectados correctamente a un controlador de vista maestro que administra toda la página. Eso significa que, además de que las vistas de los controladores son subvistas de una vista padre común, los controladores deben ser controladores secundarios de un controlador padre común. Siempre que las propiedades parentViewController del controlador estén configuradas correctamente, debería poder administrar este tipo de interfaz compuesta sin demasiada molestia.

Desafortunadamente, Apple solo ha agregado configuradores públicos para childViewControllers y parentViewControllers en iOS5. En iOS4 y versiones anteriores, está limitado a los arreglos de controlador de contenedor de Apple y no puede crear el suyo propio (al menos, no sin problemas de reenvío de eventos).

Entonces, suponiendo que necesita ser compatible con iOS4 por ahora, la respuesta número 3 parece ser su mejor opción: cree su interfaz utilizando varias vistas pero con un solo controlador. Aunque esto no es tan malo. Puede crear subclases de vista personalizadas que administran sus subvistas propias (por ejemplo, no hay ninguna regla que diga que un tableViewDataSource o delegate debe ser una subclase UIViewController, o que un botón IBAction debe ser un método en un controlador de vista en lugar de otra vista).

En realidad, encontrará que la mayoría de las funciones que normalmente construye en un controlador de vista se pueden integrar en una vista de contenedor "inteligente", permitiéndole dividir su pantalla en múltiples "vistas de controlador" independientes que administran sus propios contenidos.

Lo único que es complicado es hacer cosas como transiciones entre una vista y la siguiente. Para esto, no podrá usar los métodos presentModalViewController o pushViewController estándar, tendrá que hacer las animaciones usted mismo utilizando animaciones de transiciones CAT o UIView.