在UiTableView reloadData之后保持选定的部分/行

时间:2014-04-24 07:31:57

标签: ios objective-c uitableview reloaddata

我有一个UITableView,在选择UITableViewCell时我会调用Web服务来获取新数据,然后使用新数据重新加载UITableView

现在,所选行将始终是返回的新数据的一部分。但是,节中的行数不会是常量。

我正在尝试在重新加载表视图后选择的行上保留选择。我从didSelectRowAtIndexPath保存了indexPath。但是当我打电话时:

    [self.tableView selectRowAtIndexPath:self.selectedIndexPath 
                                animated:NO 
                          scrollPosition:UITableViewScrollPositionNone];

重新加载后,不再选择我选择的行。无论如何在重新加载UITableView之后仍然保持选择?

2 个答案:

答案 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
}