2011-01-07 17 views
5

Por el momento configuro la mayoría de mi interfaz de usuario mediante programación. Hay dos maneras de organizar las vistas que pertenecen a una pantalla (además, a la utilización de puntas):configuración de vista compleja en UIVIew o UIViewController? (Decisión de diseño)

  • En el controlador de vista, gestionar todos los puntos de vista (que es un controlador de vista!)
  • Hacer una subclase UIView personalizada y conéctelo en el controlador

Sé que ambos funcionarán, pero ¿en qué situaciones elegiría qué solución?

Además, para la primera variante, uno tiene la opción de realizar la configuración en viewDidLoad y agregar las vistas a self.view, o crear una vista de contenedor y agregar todas las vistas en loadView. Cualquier buen consejo aquí también sería apreciado.

La segunda variante se acerca al uso de un plumín, cuando se configuraría una vista completa como vista del controlador.

No pretende iniciar una guerra religiosa aquí, pero busca argumentos para ambos enfoques.

Respuesta

4

Puedo pensar en un par de criterios que usaría para elegir una opción u otra.

Si el conjunto de vistas es, o podría ser, un componente reutilizable que se muestra en muchas pantallas, me gustaría favorecer la creación de una subclase UIView.

Si el controlador de vista necesita acceder directamente a un número de vistas, las construiría en el controlador. Intento hacer que las clases UIView personalizadas sean contenedores opacos, por lo que su controlador solo necesita interactuar con la vista principal, no buscar en sus vistas secundarias.

Si el conjunto de vistas no puede presentar una API que trate un solo concepto, por ejemplo, si la jerarquía de vistas solo existe para configurar el índice z de las vistas correctamente y esas vistas se ocupan de mostrar datos no relacionados, lo haría de nuevo créelos en el controlador. Una subclase de UIView debe ser responsable de mostrar solo un único conjunto coherente de datos o administrar un conjunto de subvistas de una manera consistente.

Si las vistas deben posicionarse en relación con las vistas fuera de su jerarquía, me gustaría volver a definirlas en el controlador.

1

Think MVC (Modal, View, Controller) en este caso.

Una buena opción es crear una clase UIView separada y establecer la vista de UIViewController a esto (o agregarla como subvista a la vista del controlador), luego usar métodos de delegado para cualquier interacción del usuario desde su subclase UIView al controlador.

Sin embargo, si solo está planeando tener una vista en la vista de su controlador (por lo tanto, no intercambiando vistas, volteando, etc.) básicamente podría usar la vista del controlador para toda la interfaz de usuario.

Cuestiones relacionadas