Comment se souvenir des lignes sélectionnées et les conserver après rechargement par défaut dans UITableView?

Comment puis-je définir une ligne sélectionnée par défaut? Je veux sélectionner une ligne, prendre le numéro de la ligne sélectionnée avec indexpath.row et puis recharger la table et sélectionner la ligne ce qui a été sélectionné. Quelqu'un peut-il m'aider s'il vous plaît? Puis-je get la ligne sélectionnée dans une méthode – ( IBAction ) segmentedControlIndexChanged ? Pas dans didSelectRowAtIndexPath ?

Ceci est mon code si cela peut vous aider à comprendre

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSSsortingng *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } //lbl1 = [[UILabel alloc]initWithFrame:CGRectMake(200, 10, 100, 20) ]; // Configure the cell... NSSsortingng *depdateChoosed=[deparatureDates objectAtIndex:depSelectedIndice]; NSSsortingng *comeateChoosed=[deparatureDates objectAtIndex:comSelectedIndice]; NSSsortingng *choosedDate =[NSSsortingng ssortingngWithFormat:@"%@%@",depdateChoosed, comeateChoosed]; NSLog(@"date choisi %@ ",choosedDate); if(segment.selectedSegmentIndex==0) { cell.textLabel.text =[deparatureDates objectAtIndex:indexPath.row]; } else if(segment.selectedSegmentIndex==1) { //cell.textLabel.text =[goingBackDates objectAtIndex:indexPath.row]; //cell.textLabel.text=[goingBackDates objectAtIndex:indexPath.row]; cell.textLabel.text =[goingBackDates objectAtIndex:indexPath.row]; } return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@" champ séléctionner : %d ",indexPath.row); if(segment.selectedSegmentIndex==0) { depSelectedIndice=indexPath.row; } else if(segment.selectedSegmentIndex==1) { comSelectedIndice=indexPath.row; } //[tableView reloadData]; } -(IBAction) segmentedControlIndexChanged { int i; switch (self.segment.selectedSegmentIndex) { case 0: i=0; [tableView reloadData]; break; case 1: i=1; NSLog(@"dexieme segment selectionner"); [tableView reloadData]; default: break; } } 

 NSIndexPath *indexPath = [tableView indexPathForSelectedRow]; 

vous donnera le NSIndexPath pour la ligne sélectionnée en cours. Vous pouvez alors faire

 [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle]; 

pour sélectionner cette ligne (et l'afficher au milieu de l'écran) plus tard.

J'ai eu la même question, et voici comment je l'ai fait:

Dans votre tableViewController , ajoutez ceci dans cette fonction

 (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if(indexPath.row == 'the row you want to select') { [tableView selectRowAtIndexPath:indexPath animated:TRUE scrollPosition:UITableViewScrollPositionNone ]; [[tableView delegate] tableView:tableView didSelectRowAtIndexPath:indexPath ]; } } 

Cela va le faire:

 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section]; [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition: UITableViewScrollPositionNone]; 

ligne est le numéro de cellule que vous voulez sélectionner (commence 0 …), et section est la section où la cellule apparaît.

C'est ainsi que vous préselect une ligne dans un UITableView:

 [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition: UITableViewScrollPositionNone]; 

Définissez l'indexPath comme la ligne que vous souhaitez sélectionner, puis appelez la méthode comme indiqué ci-dessus.

Je me rends count que cette question est plutôt ancienne (2011), mais juste pour postr aussi une réponse à jour, au cas où quelqu'un (comme moi) cherche ce problème et trébuche sur cette question:

Avec iOS 9, Apple a beaucoup amélioré UITableView . Pour vous assurer que la mise au point n'est pas perdue lors du rechargement d'une table, procédez comme suit:

 tableView.remembersLastFocusedIndexPath = Yes; 

et ça va "fonctionner magiquement".

Encore mieux, mettre en œuvre

 - (NSIndexPath *)indexPathForPreferredFocusedViewInTableView:(UITableView *)tableView 

UITableViewDelegate permet à la table de savoir quelle ligne vous voulez sélectionner lorsqu'elle est dessinée pour la toute première fois.

Avant iOS 9, reloadData simplement ma propre méthode reloadData , qui reloadData la ligne sélectionnée, rechargeait la table puis la sélectionnait de nouveau. Soit dans le UITableViewController ou si j'avais besoin de travailler avec une table où je ne pouvais pas empêcher le code d'appeler reloadData directement, j'ai sous-classé UITableView et reloadData (hé, la délégation est la méthode préférée, mais parfois vous devez sous-classr et redéfinir, même dans iOS).

Utilisez le code suivant pour get les lignes sélectionnées dans une vue de table. 🙂

 NSArray *selectedRows=[tableView indexPathsForSelectedRows]; NSMutableArray *rownumberArray=[[NSMutableArray alloc]init]; for (int i=0; i<selectedRows.count; i++) { NSIndexPath *indexPath = [selectedRows objectAtIndex:i]; NSInteger row = indexPath.row; NSNumber *number = [NSNumber numberWithInteger:row]; [rownumberArray addObject:number]; } 

// rownumberArray contient les numéros de lignes des cellules sélectionnées.