2009-03-08 18 views

Respuesta

6

No creo que entiendas tu propia pregunta.

El UITableViewController es un controlador .

La UITableView es una vista.

Uno no es mejor que el otro, son objetos completamente diferentes, utilizados para cosas completamente diferentes.

Me gustaría pasar algún tiempo aprendiendo el patrón Modelo-Vista-Controlador tan frecuente a través de Cocoa y el SDK de iPhone.

The Model-View-Controller Design Pattern

+9

No estoy seguro de si el PO quiere decir esto o no, pero tengo una pregunta similar a lo que podría haber significado: ¿cuáles son las ventajas/desventajas de utilizar un UITableViewController frente a un UIViewController que contiene una UITableView ? – Bogatyr

+13

Estoy votando tu respuesta porque esa es su pregunta. Mío también. ¿Quién diablos votó esto hasta 14 ..? No son COMPLETAMENTE diferentes, están relacionados y, por lo tanto, la pregunta es válida. ¿Cuándo alguna vez subclases una UITableView? ¿Para qué se usa tableViewController en comparación con tableView? Creo que sé la respuesta ... – badweasel

+0

... pero si supiera que sabía que no la habría buscado. – badweasel

0

El enlace anterior devuelve una "página no encontrada". Por alguna razón, incluso el link corregido devuelve una "Página no encontrada" cuando está hipervinculado (tal vez Apple no permite el enlace a su sitio de desarrollador).

Para encontrar la información relevante, vaya a Conexión de desarrollador de Apple (http://developer.apple.com/index.html) y busque en "patrón de diseño de cocoa model-view-controller".

En la tabla de resultados, seleccione la "Guía de conceptos básicos de Cocoa: patrones de diseño de cacao". En esa página, desplácese hacia abajo en la Tabla de contenido en el lado izquierdo hasta que vea el elemento "Patrón de diseño de Vista de modelo-controlador". Seleccione ese elemento para leer más detalles sobre ese patrón de diseño en particular.

2

La idea es que ViewControllers contenga un árbol de subvistas (y subcontroladores) y gestione el envío de eventos a/desde sus subvistas. Por ejemplo, puede tener una vista que contenga una imagen, y esa vista viva en un controlador de vista que maneje cambios de orientación y advertencias de memoria, etc.

13

Siempre uso UITableView. Nunca uso UITableViewController.

El uso de UITableViewController es confuso. Se supone que cada controlador debe hacer una pantalla, excepto los controladores de contenedor.

Bueno, UITableViewController es un controlador y la mayoría de las veces, un tableView simplemente no es lo único que existe.

Si nos fijamos en la documentación: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewController_Class/Reference/Reference.html

UITableViewController proporcionan muy poco en comparación con nueva interfaz UITableView. Nada de lo cual es esencial.

– initWithStyle: 

(duh?Cómo inicio mi tableView en punta y personalizó una gran cantidad de todos modos)

Conseguir la Tabla

tableView property 

(el tableView originales)

Configuración del Comportamiento Tabla

clearsSelectionOnViewWillAppear property 

(de acuerdo, solo ponga un código en ViewWillAppear)

La actualización de la Tabla

refreshControl property 

[tableView recarga]?

Como puede ver,

Así que a menos que usted quiere que su código se vea más ordenado (y no mucho más), no hay razón para usar UITableViewController, que yo sepa.

+0

Solo UITableViewController puede tener contenido estático. https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7-SW20 –

+0

Además, 'UITableViewController' tiene alguna funcionalidad (por ejemplo, quitar el brillo de la navegación) y la configuración ya hecha para ti, por lo que no tienes que reinventar la rueda/modificar nada relacionado con el diseño (especialmente después de iOS 7), y funciona como se esperaba desde el principio. Solo recomendaría su método si necesito compartir la pantalla con otras subvistas que no sean la tabla. –

1

Esto es algo que encuentro muy confuso sobre Cocoa: la implementación de MVC por parte de Apple (o al menos la terminología que usan) es cuestionable. En Cocoa, la mayoría de las vistas están actuando en cierto modo como controladores en la medida en que el patrón MVC las define (basta con mirar UITableView, la mayoría de sus métodos son en realidad métodos de controlador). Por lo tanto, tiene el concepto adicional de Apple de un controlador de vista además de lo que hasta cierto punto es un controlador. El hecho de que ni siquiera necesite use UITableViewController en absoluto (incluso con el enlace de datos) básicamente demuestra que la vista actúa como su propio controlador. En MVC, no puede tener una vista vinculada a un modelo sin un controlador (es decir, el punto del controlador en MVC).

Parece que los desarrolladores de Apple, que un "controlador de vista" (por ejemplo UITableViewController) es realmente más de una clase de ayuda/gerente ligeramente más alto nivel que gestiona la clase más UITableView de bajo nivel y permite una pocos clave additional capabilities que se relacionan más con la forma en que la vista de tabla interactúa con la interfaz de usuario general de la aplicación.

Además, parece que Apple tiene la intención de que un controlador de vista sea más un controlador de pantalla, recomendando solo un controlador de vista por pantalla (lo que probablemente significa que no puede anidar controladores de vista). Sostengo que llamar a este concepto un controlador de vista es un nombre inapropiado.

Por favor, no duden en corregirme en esta persona, sigo siendo muy nuevo en Obj-C/Cocoa.

0
UITableView is a view and UITableViewController is a controller having UITableView as its root view. 

So by using UITableViewController: 
1. You have one root view that is UITableView itself. So takes less memory than UITableView with UIView as parent view in controller. 
2. Provides you ready to use template, if you needed a controller and UITableView as its main display view. 
3. Static table views are only valid when embedded in UITableViewController instances. 
Cuestiones relacionadas