2010-03-05 12 views
7

Estoy tratando de comprender los fundamentos del diseño MVC de Cocoa (Iphone), pero está siendo bastante difícil. Me encontré con varias aplicaciones de ejemplo, de la web, libros ... pero no he encontrado nada relacionado con lo que estoy buscando, ya que la mayoría de los ejemplos solo presentan una aplicación simple (es decir, un controlador de visualización con una otra cara) viewcontr y un poco más ...). Así que vamos a ver si alguien está dispuesto a ayudarme en mí que apunta a la dirección correcta:Comprender cómo la aplicación delega y ve los controladores se relacionan entre sí

  • Mi objetivo es construir una aplicación un tanto compleja. Me gustaría tener la siguiente relación de puntos de vista:

    1. vista de presentación (que tendría un controlador de carga de varias posiciones de memoria intensiva VARs)

    2. Vista menú principal: diferentes opciones que daría lugar completamente nuevo vistas complejas En el ejemplo, una opción Begin para iniciar lo que la aplicación permita hacer; una segunda opción para hacer otra tarea compleja con diferentes vistas y acciones dentro de ella, una opción de Opciones para configurar las opciones; una opción de ayuda, una sobre la opción, etcétera ..

  • En una primera aproximación que trató de integrar varios botones redondeados en una vista bajo el MainWindow plumín con un delegado de la aplicación asociada. Sin embargo, este enfoque planteó la pregunta de cómo logro cambiar entre vistas/viewcontrollers. Después de tener excepciones no detectadas porque probablemente no entiendo completamente lo básico, traté de pasar a cosas más 'simples'.

  • Luego encontré los controles Cocoa predeterminados de Navegación y Tabbar. No quiero una barra de pestañas, aunque podría venir bien para otras partes de esta aplicación. Entonces el controlador de navegación es lo que creo que es más adecuado para este caso.

  • Por lo tanto, ¿estoy en el lugar correcto si construyo una aplicación hierarchichal donde su raíz es un controlador de navegación? He visto que puedo personalizar la vista principal para mostrar una tabla personalizada, donde cada celda puede actuar como un botón para generar su vista o controlador de vista respectivos. Desde aquí, entonces puedo seguir construyendo los 'nodos hoja' de esta jerarquía de vistas/controladores de vista, ¿verdad? Aunque no me gusta la animación que por defecto proporciona el controlador nav, supongo que puedo deshacerme de ella ..

  • Para resumir de una manera sencilla: me gustaría obtener un menú como aquellos que generalmente se pueden ver en las aplicaciones Cocos2d.

Es frustrante para preguntar esto, yo sé que tiene que ser fácil, pero encuentra la documentación en un buen lío aswell como los ejemplos que he visto .. programación GUI es ser una curva de aprendizaje difícil:/

Gracias por cualquier respuesta por adelantado, y disculpe por esta larga publicación.

+3

+1 Pregunta bien pensada y detallada. Usted se tomó un tiempo para hacerlo y aprecio el esfuerzo. – TechZen

+1

Solo agregaría que el modelo Cocoa Touch no es MVC sino un modelo PAC (Presentación, Abstracción, Control). Es un concepto muy simple. Puede encontrar lo básico en wikipedia: http://en.wikipedia.org/wiki/Presentation-abstraction-control –

+0

Gracias, aclara algunos conceptos. Aunque todavía necesito muchas más horas de trabajo para entender conceptualmente el modelo Delegado/Controlador/Vista. – XF01

Respuesta

7

Por lo tanto, estoy en el lugar correcto si construir una aplicación hierarchichal donde su raíz es un controlador de navegación?

Casi. Un controlador de navegación (a pesar de ser una subclase de UIViewController) no controla las vistas sino otros controladores de vista. El controlador de navegación empuja y muestra los controladores de vista, lo que a su vez hace que las respectivas vistas del controlador se carguen y se vuelvan visibles.

Por lo tanto, la "vista raíz" es en realidad la vista que está controlada por el controlador de vista que se encuentra en la propiedad del controlador de navegación topViewController.

El delegado de la aplicación sirve para mantener el controlador de navegación y decirle qué controlador de vista presionar primero en la pila. Después de eso, los controladores de vista le dicen al controlador de navegación cuándo presionarlos y abrirlos.

De lo contrario, está en el camino correcto. Siempre debe intentar presentar información en una plataforma móvil de forma jerárquica, comenzando por la más general en la parte superior y cada vez más específica a medida que profundiza.

Y no debería avergonzarse de encontrar esto confuso. El 90% de la información introductoria/tutorial que hay, incluidos los libros y los recursos de Apple, se centran en los aspectos geniales de la interfaz y casi no dicen nada sobre el diseño de la aplicación real o cómo todas las piezas encajan conceptualmente.

+0

¡Gracias! Así que debería crear un Init/RootViewController asociado a la plumilla MainWindow, subclassing un controlador de Nav. Y desde aquí, sigue construyendo la jerarquía. ¿Pero qué roles juega el Delegado? En todas partes que leo dice que debe ser visto como el Controlador, mientras que yo lo veo como una función típica "C" principal, y los Controladores de Vista son los Controladores reales. Estoy bastante desordenado. – XF01

+1

No subescribas UINavigationController, solo agregas una instancia al delegado de tu aplicación como una propiedad. A continuación, establece un controlador de vista normal como topContoller del controlador de navegación. El delegado de la aplicación es un objeto que maneja tareas específicas para el objeto UIApplication. Específicamente, maneja aquellas funciones que deben personalizarse en cada aplicación, como qué vistas abrir. No es realmente análogo a una función Main(). – TechZen

+0

Gracias, sus comentarios son realmente útiles. Comienzo a entender los fundamentos. Leer la API es la clave, como con todo. – XF01

1

Tiene razón sobre la poca información que se cubre sobre delegados de aplicaciones para controladores de nav. He estado cavando e intentando hacer que todas mis pantallas se vinculen, etc. Me divertí mucho viendo cómo mis aplicaciones se veían más que solo un poco de la interfaz de usuario monstruosa de Frankenstein. ahahah

Los videos de Itunes dev son geniales para mirar la teoría de UIviews de la pila de inserción y pop. Descubrí que se movían un poco rápido, pero después de verlos, las manos tenían más sentido. Me obligué a mirarlos a todos y sentir realmente lo que está pasando. Esperemos tener una buena aplicación trabajando pronto.

Cuestiones relacionadas