iOS: el uso de varios controlleres de vista para una sola pantalla

En iOS, si una pantalla incluye una gran cantidad de funciones, me cuesta mantener limpio el código de su controller de vista debido a muchos methods definidos para la misma pantalla. Especialmente con los methods de delegado para (por ejemplo, UITableView , UIAlertView , etc.) o si ese mismo file VC es compatible tanto con iPad como con iPhone, se convierte rápidamente en un desastre.

También me di count de que si #ifdef declaraciones #ifdef , rompe la bonita #pragma mark - Title Agrupación de #pragma mark - Title . Pregunta1: ¿Cuál es su práctica para organizar un controller de vista que se vuelve muy voluminoso?

Pregunta2 – Del mismo modo, para una página con varios componentes parciales (por ejemplo, un menu inferior, un menu superior, un menu lateral, lo que sea), ¿cómo puede encontrar el siguiente patrón?

 UIViewController *vc_component = ... [self.view addSubview:vc_component.view]; 

Me parece correcto en términos de MVC porque vc_component se encarga de todas las interacciones de su vista. Lo único que me molesta es el hecho de que hay varios controlleres de vista responsables de la misma pantalla al mismo time, lo que no es la OMI ideal.

Me encantaría conocer tu opinión.

en mi experiencia, si un controller de vista contiene mucho código en él, intentaría tomar este código en una class diferente. Por ejemplo, mi controller de vista contiene un panel que maneja algunos controles para administrar el object model. En este caso, crearía la vista ModelPanelControl y pondría toda su lógica en su implementación y luego la convertiría en una subview de mi View Controller. Sin embargo, si tiene muchas llamadas de delegado a su controller de vista, creo que no hay nada malo con esto mientras divide estas llamadas con marcas pragmáticas.

Para responder a su segunda pregunta, asumiría que su proyecto es> = iOS5, porque hay una muy buena API de contención de la vista que puede usar para agregar varios controlleres de vista a una sola pantalla. Aquí hay una documentation y también puede ver el video de WWDC 2011 llamado Contención de UIViewController de Implementación.

Espero que esto responda a tus preguntas. ¡Aclamaciones!

En respuesta a su primera pregunta, si está teniendo varios viewControllers gestionados por un contenedor viewController, ¿por qué no tendría cada uno de esos viewControllers delegate a sus funciones explícitas? Por lo tanto, cualquier acción de button, etc., que dispare un UIAlertView o UIActionSheet desde ese viewController sería el delegado a esas alertas específicas?

También podría estar bien atendido buscando en algunas de las categorías de bloque UIKit que están ahí fuera. Gentleman named Mugunth Kumar tiene uno llamado UIAlertView + MKBlockAdditions que he encontrado muy útil para deshacerse de un grupo de espaguetis delegates.

Es una práctica común definir un UIViewController base que henetworkingan todos sus otros viewControllers, donde implementa todos los methods comunes de ayudante. Ponga el denominador común más bajo allí y configure el rest de sus controlleres como subclasss de este. Eso al less ayuda con los problemas de copyr y pegar, y el paradigma DRY.

Finalmente, hasta iOS5 fue un hack para encapsular viewControllers dentro de viewControllers porque los methods de rotation no se invocaron en todas las subvistas automáticamente. El flujo de trabajo es así:

 [viewControllerContainer addChildViewController:anotherViewController]; [viewControllerContainer.view addSubview:anotherViewController.view]; [anotherViewController didMoveToParentController:viewControllerContainer]; 

Eso enseña al sistema operativo quién está a cargo de quién.