我有一个UITableView
,当选择UITableViewCell
时,我会调用web服务来获取新数据,然后用新数据重新加载UITableView
。
现在,选定的行将始终是返回的新数据的一部分。但是,一个节中的行数不会是恒定的。
重新加载表视图后,我正在尝试保留所选行的选择。我保存了didSelectRowAtIndexPath
中的indexPath。然而,当我打电话时:
[self.tableView selectRowAtIndexPath:self.selectedIndexPath
animated:NO
scrollPosition:UITableViewScrollPositionNone];
没有发生任何事情,并且重新加载后我选择的行不再被选中。在重新加载UITableView
之后,是否有保留选择的方法?
尝试
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView selectRowAtIndexPath:self.selectedIndexPath
animated:NO
scrollPosition:UITableViewScrollPositionNone];
});
此外,请确保在重新加载UITableView
之后,self.indexPath
属性将表示相同的单元格。
在reloadData
之前,保留选定的索引路径。重新加载后,使用selectRowAtIndexPath:
再次设置选定的行,例如
NSArray<NSIndexPath *> *indexPathsForSelectedRows = self.itemsTableView.indexPathsForSelectedRows; // multiple selection
NSIndexPath *indexPathForSelectedRow = self.itemsTableView.indexPathForSelectedRow; // single selection
[self.tableView reloadData];
[self.tableView selectRowAtIndexPath:indexPathForSelectedRow animated:NO scrollPosition:UITableViewScrollPositionNone]; // single selection
for (int i = 0; i < indexPathsForSelectedRows.count; i++) {
[self.tableView selectRowAtIndexPath:indexPathsForSelectedRows[i] animated:NO scrollPosition:UITableViewScrollPositionNone]; // multiple selection
}