cocoa-touch uiview uiviewcontroller

cocoa touch - ¿Es aconsejable "anidar" los controladores UIView dentro de otros controladores UIView como lo haría con UIViews?



cocoa-touch uiviewcontroller (3)

Tengo una vista bastante compleja, para mí de todos modos, que tiene algunas "bandejas" con elementos de interfaz personalizados. Se deslizan dentro y fuera de mi vista de raíz. Me gustaría anidar (agregar Vista) los elementos dentro de la vista. Cada uno necesita una configuración antes de mostrarse ... y ninguno puede configurarse en IB (son subclases de UIView).

Me pregunto si tiene sentido subclase UIViewController para cada "bandeja" y luego hacer que la propiedad de la vista del VC apunte a la vista de la "bandeja" que puedo rellenar con mis objetos UIView personalizados. De esta manera puedo aprovechar los métodos viewDidLoad, etc ... en UIViewController.

No estoy al tanto de que otros hagan esto, al menos en las pocas muestras que he visto. Se crearía una situación en la que se mostrarían a la vez múltiples controladores de vista en la pantalla. desde el controlador de navegación hasta el control rootViewController y su vista y luego cualquier número (bueno, si el tamaño de la pantalla lo permite) de estos pequeños trayViewControllers. Si es así, ¿cómo funciona la cadena de respuesta? Supongo que iría de la vista UIV más baja a su VC adjunto, luego a la vista principal de esa VC, luego la VC de esa vista, etc. Repetir, repetir ... hasta la aplicación UIA ... ¿Estoy buscando problemas?

O, me limito a seguir con UIViews y agregar subviews en subviews, etc. etc.


Antes de iOS 5.0, esto no se recomendaría específicamente porque los eventos del ciclo de vida de los controladores de la vista anidada - viewWillAppear, etc. - no serán llamados. Ver Abusar UIViewControllers .

Con varias vistas de UIViewController visibles al mismo tiempo, es posible que algunos de esos controladores no reciban mensajes importantes como -viewWillAppear: o -didReceiveMemoryWarning. Además, algunas de sus propiedades, como parentViewController e interfaceOrientation, no se pueden configurar o actualizar como se esperaba.

iOS 5.0 agregó UIViewControllers de contención que maneja correctamente esos eventos del ciclo de vida agregando controladores de vista secundarios.

- (void)addChildViewController:(UIViewController *)childController

Pasé innumerables horas tratando de hacer que los controladores de vista anidados funcionaran en iOS 4. Eventualmente lo hice, pero se necesitaba un montón de código de pegamento que era fácil equivocarse. Entonces vi la advertencia en los documentos.


Intento hacer lo mismo, pero la documentation de Apple me disuadió de su enfoque, que dice que "no debe usar controladores de visualización para administrar vistas que ocupan solo una parte de su ventana, es decir, solo una parte del área. definido por el rectángulo de contenido de la aplicación. Si desea tener una interfaz compuesta de varias vistas más pequeñas, insértelas todas en una sola vista de raíz y administre esa vista con su controlador de vista ".


Mi experiencia en lo que estás tratando de hacer ha sido buena. Trato de mantener los archivos de la plumilla lo más simples posible, así que tomo cualquier posible "subvista" y la encapsulo en su propio archivo de la plumilla con su propio controlador de vista, por lo que termino teniendo controladores de vista anidados. En una de mis aplicaciones tengo una celda de vista de tabla muy compleja, que tiene una subvista. Así que terminé teniendo una jerarquía como esta: el controlador de vista de tabla en el nivel superior, los controladores de la celda de vista de tabla para cada fila y dentro de cada uno de estos un controlador de subvista para la subvista dentro de cada celda.

Y todo funciona bien.

Perdonen mi ingles