Recientemente descubrí que UIView
s solo deberían tener UIViewController
s cuando llenan toda la ventana (o están gestionados por otro UIViewController
como UINavigationController
o UISplitViewController
). Esta cita es de la documentación para UIViewController:¿Debería visualizarse la lógica en una UIView o (cuando corresponda) su UIViewController?
No debe usar los controladores de vista para administrar vistas que llenen solo una parte de su ventana, es decir, solo parte del área definida por el rectángulo de contenido de la aplicación. Si desea tener una interfaz compuesta por varias vistas más pequeñas, incrústelas todas en una sola vista de raíz y administre esa vista con su controlador de vista.
Normalmente pongo mi lógica de vista en la UIView incluso cuando es administrada por un UIViewController, pero a menudo me resulta necesario acceder a las propiedades de UIViewController, como su propiedad navigationController. Sin embargo, se supone que las UIViews no están al tanto de su UIViewController.
Mi conclusión es que la lógica de vista debe ir en un UIView's UIViewController cuando exista, y en la UIView de lo contrario.
Alternativamente, ¿es una mejor práctica crear una clase de controlador para una vista que es no una subclase de UIViewController? UIPopoverController (una subclase NSObject) parece seguir este patrón, aunque en la mayoría de los casos (UIButton, etc.) las vistas no parecen tener clases de controlador dedicadas.
Además, ¿debería UIViewControllers utilizarse alguna vez sin un archivo nib/xib (es decir, un UIView creado en código)? – titaniumdecoy
Personalmente, rara vez uso archivos NIB, así que sí, puede usar UIViewController y amigos sin ellos. – Alex
El hecho de que -initwithNibName: bundle: es el inicializador designado de UIViewController parece indicar que no está destinado a ser utilizado sin un plumín. – titaniumdecoy