在UiTableView重新加载数据后保留选定的节/行



我有一个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
}

最新更新