Как запоминать выбранные строки и поддерживать их после перезагрузки по умолчанию в UITableView?
Как установить строку, выбранную по умолчанию? Я хочу выбрать строку, взять число выбранной строки с помощью indexpath.row
, а затем перезагрузить таблицу и выбрать строку, которая была выбрана. Может кто-то мне помочь, пожалуйста? Могу ли я получить выбранную строку в методе - (IBAction
) segmentedControlIndexChanged
? Не в didSelectRowAtIndexPath
?
Это мой код, если он может помочь вам понять
- (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;
}
}
Ответы
Ответ 1
NSIndexPath *indexPath = [tableView indexPathForSelectedRow];
предоставит вам NSIndexPath
для текущей выбранной строки. Затем вы можете сделать
[tableView selectRowAtIndexPath:indexPath
animated:NO
scrollPosition:UITableViewScrollPositionMiddle];
чтобы выбрать эту строку (и показать ее в середине экрана) позже.
Ответ 2
У меня был тот же вопрос, и вот как я это сделал:
В вашем tableViewController
добавьте это в эту функцию
(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
];
}
}
Ответ 3
Это будет сделано:
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section];
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition: UITableViewScrollPositionNone];
Где строка - номер ячейки, которую вы хотите выбрать (начинается 0...), а раздел - это раздел, в котором отображается ячейка.
Ответ 4
Вот как вы выбираете строку в UITableView:
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition: UITableViewScrollPositionNone];
Установите indexPath как выбранную строку, а затем вызовите вызов метода, как указано выше.
Ответ 5
Я понимаю, что этот вопрос довольно старый (2011), но просто для того, чтобы также опубликовать обновленный ответ, если кто-то (например, я) ищет эту проблему и спотыкается по этому вопросу:
В iOS 9 Apple значительно улучшила UITableView
. Чтобы убедиться, что фокус не потерян при перезагрузке таблицы, просто выполните следующее:
tableView.remembersLastFocusedIndexPath = Yes;
и он будет "волшебным образом работать".
Еще лучше, реализуйте
- (NSIndexPath *)indexPathForPreferredFocusedViewInTableView:(UITableView *)tableView
в UITableViewDelegate
, чтобы таблица знала, какую строку вы хотите выбрать, когда она будет выведена на экран в самый первый раз.
Перед iOS 9 я обычно просто писал свой собственный метод reloadData
, который получает текущую выбранную строку, перезагружает таблицу и затем снова ее выбирает. Либо в UITableViewController
, либо если мне нужно, чтобы работать со столом, где я не мог напрямую запретить вызов кода reloadData
, я подклассифицировал UITableView и переопределял reloadData
(привет, делегирование - это предпочтительный путь, но иногда вы просто для подкласса и переопределения, даже в iOS).
Ответ 6
Используйте следующий код, чтобы получить выбранные строки в представлении таблицы.:)
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 содержит номера строк для выбранных ячеек.