Comment définir une ligne sélectionnée par défaut? Je veux sélectionner une ligne, prenez le nombre de lignes sélectionnées avec indexpath.row
, puis rechargez le tableau et sélectionnez la ligne qui a été sélectionnée. Quelqu'un peut-il m'aider s'il vous plaît? Puis-je obtenir la ligne sélectionnée dans une méthode - (IBAction
) segmentedControlIndexChanged
? Pas dans didSelectRowAtIndexPath
?
Ceci est mon code s'il peut vous aider à comprendre
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *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...
NSString *depdateChoosed=[deparatureDates objectAtIndex:depSelectedIndice];
NSString *comeateChoosed=[deparatureDates objectAtIndex:comSelectedIndice];
NSString *choosedDate =[NSString stringWithFormat:@"%@%@",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 actuellement sélectionnée. 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'avais 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 le fera:
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section];
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition: UITableViewScrollPositionNone];
Où ligne est le numéro de cellule que vous souhaitez sélectionner (commence 0 ...), et section est la section où la cellule apparaît.
Voici comment vous présélectionnez une ligne dans un UITableView:
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition: UITableViewScrollPositionNone];
Définissez indexPath pour être la ligne que vous souhaitez sélectionner, puis effectuez l'appel de méthode comme ci-dessus.
Je me rends compte que cette question est assez ancienne (2011), mais juste pour publier également une réponse à jour, au cas où quelqu'un (comme moi) recherche ce problème et tombe sur cette question:
Avec iOS 9, Apple a beaucoup amélioré UITableView
. Pour vous assurer que le focus n'est pas perdu lors du rechargement d'une table, procédez comme suit:
tableView.remembersLastFocusedIndexPath = Yes;
et cela "fonctionnera comme par magie".
Encore mieux, implémentez
- (NSIndexPath *)indexPathForPreferredFocusedViewInTableView:(UITableView *)tableView
dans le UITableViewDelegate
pour indiquer au tableau la ligne que vous souhaitez sélectionner lors de son premier affichage à l'écran.
Avant iOS 9, j'écrivais généralement ma propre méthode reloadData
, qui obtient la ligne actuellement sélectionnée, recharge la table, puis la sélectionne à nouveau. Soit dans le UITableViewController
ou si j'avais besoin de cela pour travailler avec une table où je ne pouvais pas empêcher le code d'appeler reloadData
directement, j'ai sous-classé UITableView et remplacé reloadData
(hé, délégation est la méthode préférée, mais il suffit parfois de sous-classer et de remplacer, même dans iOS).
Utilisez le code suivant pour obtenir 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 ligne des cellules sélectionnées.