IOS: methods delegate tableview pour deux tableview

J'ai cette méthode déléguée pour une tableview à l'intérieur d'une class:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [array1 count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSSsortingng *CellIdentifier = @"Cell"; UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if(cell == nil){ cell = [[[UITableViewCell alloc]initWithStyle:UITableViewStylePlain reuseIdentifier:CellIdentifier] autorelease] ; } cell.textLabel.text = [array1 objectAtIndex:indexPath.row]; return cell; } 

si j'ai un seul UITableView c'est bien mais si j'ai deux UITableView? Comment puis-je organiser mon code? avec tag?

Voyez comment toutes les methods déléguées ont une tableView:(UITableView *)tableView en eux?

Vous pouvez définir vos vues de table dans le file d'en-tête et ensuite simplement aller: (en supposant que votre table s'appelle myTable )

 if (tableView == myTable) 

Ensuite, vous pouvez avoir autant de vues que vous le souhaitez.

Donc par exemple:

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [array1 count]; } 

Devient:

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (tableView == myTable) { return [array1 count]; } if (tableView == myTable2) { return [array2 count]; } return 0; } 

Ma suggestion est d'avoir votre source de données agissent comme un délégué de vue de table, au lieu de votre controller.

Ceci est une design plus proche du model Model-View-Controller et vous permettra beaucoup plus de flexibilité et évitera de vérifier la valeur spécifique que l'argument tableView a dans vos methods déléguées.

Dans votre cas, votre délégué / source de données serait une class avec un membre de type NSArray et implémentant également le protocole UITableViewDelegate .

Oui, vous pouvez le faire avec tag. Donnez vos UITableViews les labels 1 et 2.

mettre en place un commutateur:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSSsortingng *CellIdentifier = @"Cell"; UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if(cell == nil){ cell = [[[UITableViewCell alloc]initWithStyle:UITableViewStylePlain reuseIdentifier:CellIdentifier] autorelease] ; } switch ([tableView tag]) { case 1:{ [[cell textLabel] setText:@"First tag"] break; } case 2:{ [[cell textLabel] setText:@"Second tag"] break; } default: break; } return cell; } 

Chacune de ces methods transmet une reference à la vue de table qui l'appelle. Je relie habituellement chaque table à un sharepoint vente dans un constructor d'interface et renvoie conditionnellement la source de données en fonction d'une comparaison avec tableView dans les methods de délégué et les noms de sharepoint vente. Le faire avec une label est également possible mais plus désordonné et plus ouvert aux complications lors de l'édition de votre structure de vue.