2010-09-22 16 views
6

He estado mirando la API para la Programación IOS, y he estado leyendo sobre los controladores de vista y UIViews. Parece que las subclases UIViewController son realmente útiles para la navegación modal y la animación personalizada, pero no puedo ver ningún otro uso que eso.¿Cuándo debería usar un UIViewController en la Programación IOS?

¿Cuál es la ventaja de utilizar una subclase UIViewController en lugar de una subclase normal NSObject?

Por qué

@interface MyViewController : UIViewController { 
} 

-(void)handleEvent; 

@end 

En lugar de simplemente

@interface MyViewController : NSObject { 
    UIView* view; 
} 

@property(retain) UIView* view; 
-(void)handleEvent; 

@end 

No que acaba de terminar la adición de sólo el fin de la ventana, no el propio viewController real? Para la mayoría de los propósitos, ¿no está toda la funcionalidad que necesita encapsular dentro del objeto UIView? que acaba de terminar la adición de esta manera:

[window addSubview:myViewControllerInstance.view] 

¿Hay un uso para UIViewController que no sea construido en la funcionalidad como modal de navegación?

Gracias.

(Lo siento si esto es una pregunta estúpida, he estado aprendiendo esto durante 2 días ahora)

Respuesta

2

Cocoa en Mac OS e iOS hacen un uso intensivo del patrón Model-View-Controller (MVC). Siguiendo el modelo de MVC, UIViewController es una clase de controlador. Su trabajo es coordinar las interacciones entre su interfaz de usuario (objetos de visualización) y sus datos de aplicación (objetos de modelo). Más básicamente, el controlador es principalmente donde coloca la lógica de su aplicación. Maneja los eventos y llama la vista y modela en consecuencia.

Vea el UIViewController reference, que tiene una buena descripción de la clase.

Al derivar de UIViewController, obtienes un montón de funcionalidad de controlador gratis, como cargar vistas desde un archivo Nib (initWithNibName: bundle :) y responder a eventos relacionados con la vista (viewWillAppear :, viewWillDisappear :). Además, UIViewController es en sí mismo una subclase de UIResponder, que contiene la funcionalidad para manejar eventos táctiles (touchesBegan: withEvent, touchesMoved: withEvent, touchesEnded: withEvent).

Básicamente, no hay razón para NO usar UIViewController con toda la funcionalidad que proporciona. Incluso si pudieras lograr hacerlo, sería mucho más trabajo, sin ningún beneficio real.

+1

El hecho es que, en la mayoría de las arquitecturas Model-View-Controller que he usado o desarrollado, el controlador es completamente independiente de la vista. Estos "Controladores de vista" fomentan un acoplamiento tan ajustado entre la vista y el controlador. ¿Debería hacer una clase de controlador más grande para comunicarme entre los controladores de vista individuales y el modelo? – user434565

+0

El patrón MVC no desacopla el controlador con la vista. Si observa los diagramas de MVC, verá que, de hecho, la parte del controlador maneja directamente tanto el modelo como la vista. Un 'UIViewController' ya se encarga de la mayor parte del" control "de la" vista ". –

+0

¿Por qué no hay una clase 'Modelo' de la subclase? –

0

Tome un vistazo a las propiedades y métodos de instancia de la clase UIViewController, que no te dan de forma gratuita si acabas de subclasificar NSObject. Hay muchas cosas allí que usará en todas sus aplicaciones.

Cuestiones relacionadas