2009-07-02 13 views
25

Estoy escribiendo una aplicación de iPhone basada en navegación, y me gustaría tener una UIToolBar acoplada en la parte inferior de la pantalla, con un desplazamiento UITableView entre la barra de herramientas y la barra de navegación.¿Cuál es la forma correcta de agregar una barra de herramientas a una UITableView?

He visto un par de foros donde se ha sugerido que el controlador de vista que maneja esta vista debe ser un UIViewController estándar en lugar de un UITableViewController. El controlador de vista tendría que implementar el delegado UITableView y los métodos de fuente de datos, además de todas las anulaciones estándar de UIViewController. ¿Qué funcionalidad incorporada (si corresponde) debo recrear en esta subclase del controlador de vista distinta de los protocolos antes mencionados para que actúe como un UITableViewController? ¿Hay algo que estoy perdiendo yendo por esta ruta?

¿O sería mejor anidar un UITableViewController dentro de un UIViewController estándar?

Respuesta

49

A partir del OS 3.0 del regulador de la navegación tiene una barra de herramientas, solidario Para que aparezca:.

[self.navigationController setToolbarHidden:NO]; 

Por implmenting:

- (void)setToolbarItems:(NSArray *)toolbarItems animated:(BOOL)animated 

en su controlador de vista, puede configurar los elementos de la barra de herramientas.

Ya no tiene que preocuparse de dónde se encuentra la barra de herramientas en su jerarquía.

(typo corregido)

2

Todo lo que necesita hacer es implementar los métodos UITableViewDelegate y UITableViewDatasource necesarios para el nivel de funcionalidad de vista de tabla que necesita. Estos métodos pueden estar en cualquier clase (s) aunque dichas clases deben ajustarse a los protocolos relevantes. El delegado y la fuente de datos se deben configurar en la instancia de UITableView, ya sea programáticamente o con el Interface Builder. De acuerdo con los documentos que va a perder alguna funcionalidad - ver el overview section.

Personalmente, me parece que muchos desarrolladores están obsesionados con proporcionar toda esta funcionalidad en una única clase de controlador de vista monolítica, y que debido a que tienen una vista de tabla en su vista, se debe usar una subclase de UITableViewController. Sin embargo, me gusta considerar el Single Responsibility Principle y con frecuencia romper el origen de datos y delegar en clases separadas cuando la complejidad es otra cosa que simple. El código tampoco está vinculado a una implementación específica de UIViewController.

En situaciones en las que tengo clases datasource/delegate separadas, a menudo las construyo y las conecto a la vista de tabla utilizando Interface Builder y no en el código. Este enfoque (al menos para mí) está en el espíritu de Dependency Injection y ahorra escribir un código de placa de caldera, y proporciona algún nivel de decoupling.

Estas opciones, por supuesto, están influenciadas por la complejidad de la funcionalidad que está tratando de lograr; para implementaciones simples, puede que me encuentre usando UITableViewController.

9

Corey Floyd es principalmente correcta, excepto que

[self.navigationController setToolBarHidden:NO]; 

debe ser

[self.navigationController setToolbarHidden:NO]; 

Es decir, la "b" en "setToolbarHidden" debe ser minúscula . Además, el nombre del método que aparece en la iPhone OS Reference es en realidad

- (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated 

aunque parece que la omisión del parámetro animated también funciona.

+0

oops, corregido. –

0

Pruebe esto:

self.navigationController.toolbarHidden = NO; 

espero que le ayuda.

7
//Tool bar 
[self.navigationController setToolbarHidden:NO]; 

UIBarButtonItem *buttonItem = [[ UIBarButtonItem alloc ] initWithTitle: @"Select All" 
               style: UIBarButtonItemStyleBordered 
               target: self 
               action: @selector(selectAll:) ]; 
UIBarButtonItem *buttonNext = [[UIBarButtonItem alloc]initWithTitle:@"Next" style:UIBarButtonItemStyleBordered target:self action:@selector(goNext:)]; 
self.toolbarItems = [ NSArray arrayWithObjects: buttonItem, buttonNext, nil ]; 

[ buttonItem release ]; 
[buttonNext release]; 
Cuestiones relacionadas