保持选定的单元格重载reloadRowsAtIndexPaths UITableView

che*_*ewy 6 objective-c cell uitableview ios

在其中一个视图中有一个UITableView,它经常更新.使用"reloadRowsAtIndexPaths"以经典方式跟踪更改

-(void)refreshCells:(NSArray *)changedCells
{
    NSLog(@"refreshCells %i",[changedCells count]);
    [TableView beginUpdates];
    [TableView reloadRowsAtIndexPaths:changedCells withRowAnimation:UITableViewRowAnimationBottom];
    [TableView endUpdates];
}
Run Code Online (Sandbox Code Playgroud)

问题:如何保留用户上次选择的单元格.每次更新refreshCells后,单元格位置可能会发生变化?

Mar*_*n R 9

您可以使用保存当前选择

NSIndexPath *selectedRow = [self.tableView indexPathForSelectedRow];
Run Code Online (Sandbox Code Playgroud)

在重新加载之前再次选择它

if (selectedRow) {
    [self.tableView selectRowAtIndexPath:selectedRow animated:NO scrollPosition:UITableViewScrollPositionNone];
}
Run Code Online (Sandbox Code Playgroud)

重装后.除非您致电insertRowsAtIndexPaths:或,否则单元格位置不会改变deleteRowsAtIndexPaths:.

  • 将动画属性设置为NO将不允许用户查看取消选择和选择步骤.因此,用户在重新加载单元格时不会注意到该行已被取消选择. (2认同)