2010-01-18 6 views
8

Est-ce que quelqu'un connaît un moyen simple de gérer plusieurs tablesViews dans un viewController? Voici comment je l'ai fait jusqu'à présent:Comment gérer 2 vues de table dans 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) 
... 
} 

Je trouve vraiment ennuyeux que je dois utiliser un if/autre pour chaque méthode de délégué unique. De plus, il est vraiment difficile à lire quand il y a beaucoup de tablesViews. En outre, j'ai le même problème avec NSURLConnection, etc ... Dès que j'ai plusieurs objets qui répondent au même protocole de délégué, les choses se compliquent.

Quelle est la meilleure façon de simplifier les choses? Merci

Répondre

6

Vous pouvez utiliser des sélecteurs et un type d'identificateur pour les vues de table (la balise UIView, par exemple). Quelque chose comme ceci:

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

Bien sûr, vous aurez besoin d'avoir une méthode pour chacune de vos vues de table. Supposons que vos deux tables aient les étiquettes 100 et 101, vous aurez alors tableView100:titleForHeaderInSection et tableView101:titleForHeaderInSection.

+0

C'est très pratique! Merci. – nmondollot

6

Une méthode que j'ai souvent utilisée est d'avoir réellement les délégués et la source de données pour les deux UITableView s être des objets différents. De cette façon, votre contrôleur de vue n'a pas besoin de basculer en arrière, et votre code est globalement plus propre et plus simple.

+0

Cela a du sens. Je le ferai la prochaine fois que je dois gérer plusieurs objets de délégation. Merci. – nmondollot

Questions connexes