2010-01-12 13 views
5

Tengo un UIViewController que debería ser capaz de mostrar tableView s con varias fuentes de datos. El UITableView abarca aproximadamente la mitad del tamaño de la pantalla, y hay un botón arriba y abajo que le permite pasar por diferentes datos. Cada vez que se golpea el botón arriba y abajo, me gustaría usar UIViewAnimationTransitionCurlDown o algo similar para mostrar el siguiente UITableView.¿La mejor manera de manejar múltiples UITableViews en un UIViewController?

La pregunta es: ¿Necesito múltiples UIViewControllers para hacer esto, con un tableView incrustado en cada uno? ¿Debo simplemente crear una instancia de UITableView y cambiar su origen de datos cuando se pulsa un botón hacia arriba o hacia abajo? Si solo hay una instancia de UITableView, ¿cómo logro obtener una transición de curl sobre la parte de la pantalla que toma para que parezca que está entrando un nuevo tableView?

Respuesta

5

¿Por qué no tener cada vista de tabla como propia UITableViewController, y anidar estas dentro del controlador de vista de la pantalla actual? De esta forma, el controlador de vista de la pantalla es responsable de intercambiar sus subvistas, cada una de las cuales tiene un controlador de vista de tabla que contiene la lógica necesaria para mostrar sus datos.

Al final, se trata de cómo se ve su funcionalidad y conjunto de datos. Puede ser más fácil implementar el código de delegado de vista de tabla & una vez, inyectando una fuente de datos real en esta clase, o puede ser más fácil escribir código de fuente de datos personalizado para cada vista de tabla.

+0

¿Cómo "anidarías" un controlador de vista con otro? Entiendo agregar subvistas y todo, ¿pero un controlador de uitableview? – randombits

+1

Su controlador de vista "primario" sería responsable de crear los controladores de vista de tabla apropiados y mostrar sus vistas. No hay ninguna razón por la que no pueda tener varias vistas en la pantalla simultáneamente, controladas por controladores de vista separados. – pix0r

+1

Sí, básicamente su método viewDidLoad simplemente puede hacer algo como topTableController = [[MyTopTableController alloc] init]; topTableController.view = self.topTableView; topTableController.delegate = self; (o haga algo similar en un archivo de punta) ... Habiendo examinado esto, parece que es más fácil usar un controlador por mesa en lugar de tratar de usar un controlador como un delegado/ds para varias tablas. Puede hacerlo porque los métodos de delegado pasan en un puntero al UITableView que puede si() o cambiar() en, pero puede ser un diseño más limpio para usar múltiples "subcontroladores" – Nimrod

Cuestiones relacionadas