我有一个UITableView
,在选择UITableViewCell
时我会调用Web服务来获取新数据,然后使用新数据重新加载UITableView
。
现在,所选行将始终是返回的新数据的一部分。但是,节中的行数不会是常量。
我正在尝试在重新加载表视图后选择的行上保留选择。我从didSelectRowAtIndexPath
保存了indexPath。但是当我打电话时:
[self.tableView selectRowAtIndexPath:self.selectedIndexPath
animated:NO
scrollPosition:UITableViewScrollPositionNone];
重新加载后,不再选择我选择的行。无论如何在重新加载UITableView
之后仍然保持选择?
答案 0 :(得分:4)
尝试
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView selectRowAtIndexPath:self.selectedIndexPath
animated:NO
scrollPosition:UITableViewScrollPositionNone];
});
另外,请确保在重新加载self.indexPath
后,您的UITableView
属性将代表同一个单元格。
答案 1 :(得分:0)
在重新加载数据之前,最好保留选定的indexPath。
重新加载后使用selectRowAtIndexPath :,设置选定的行。
像:
NSArray<NSIndexPath *> *selectedIndexpathArray = self.itemsTableView.indexPathsForSelectedRows; // multiple selection
NSIndexPath *selectedPath = self.itemsTableView.indexPathForSelectedRow; // single selection
[self.tableView reloadData];
[self.tableView selectRowAtIndexPath:selectedPath animated:NO scrollPosition:UITableViewScrollPositionNone]; // single selection
for (int i = 0; i < [selectedIndexPaths count]; i++) {
[tableView selectRowAtIndexPath:selectedIndexPaths[i] animated:NO scrollPosition:UITableViewScrollPositionNone]; // multiple selection
}