2010-01-18 7 views
8

¿Alguien conoce una manera simple de administrar varias tableViews en un viewController? Aquí es como yo he estado haciendo hasta ahora:¿Cómo administrar 2 vistas de tabla en 1 viewController?

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
if(tableView == self.tableView1) 
return 1; 
else if(tableView == self.tableView2) 
return 2; 
} 

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
if(tableView == self.tableView1) 
return @"bla"; 
else if(tableView == self.tableView2) 
return @"blabla"; 
} 

-(NSString *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if(tableView == self.tableView1) 
... 
else if(tableView == self.tableView2) 
... 
} 

me resulta muy molesto que tengo que utilizar una sentencia if/else para todos los métodos de delegado individual. Además, es muy difícil de leer cuando hay muchas TableViews. Además, tengo el mismo problema con NSURLConnection, etc ... Tan pronto como tengo varios objetos que responden al mismo protocolo delegado, las cosas se complican.

¿Cuál es la mejor manera de simplificar las cosas? Gracias

Respuesta

6

Puede usar selectores y algún tipo de identificador para las vistas de tabla (la etiqueta UIView, por ejemplo). Algo como esto:

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
    return [self performSelector:NSSelectorFromString([NSString stringWithFormat:@"tableView%d:titleForHeaderInSection:", tableView.tag])]; 
} 

Por supuesto, tendrá que tener un método para cada una de sus vistas de tabla. Supongamos que sus dos tablas tienen las etiquetas 100 y 101, tendrá entonces tableView100:titleForHeaderInSection y tableView101:titleForHeaderInSection.

+0

¡Eso es bastante conveniente! Gracias. – nmondollot

6

Un método que he usado a menudo es que los delegados y la fuente de datos para los dos UITableView sean objetos diferentes. De esta forma, su controlador de vista no tiene que cambiar de un lado a otro, y su código es en general más limpio y simple.

+0

Eso tiene sentido. Lo haré la próxima vez que tenga que manejar varios objetos de delegación. Gracias. – nmondollot

Cuestiones relacionadas