如何以编程方式重新加载行?

fol*_*lex 9 uitableview ios

令人沮丧的事实:在召唤之后tableView:moveRowAtIndexPath:toIndexPath:,tableView:cellForRowAtIndexPath:不会被召唤出那一行.

在更新块reloadRowsAtIndexPaths:withRowAnimation:之后或之前调用也不起作用:它会引发不一致错误.tableView:moveRowAtIndexPath:toIndexPath:UITableView

我看到2个解决方法:删除+插入而不是移动或在另一个更新块中重新加载.

我的问题是:是否有其他方法可以重新加载并在同一个更新块中移动UITableView的行?

Tim*_*ose 5

我认为不可能同时进行移动和重新加载.我已经尝试了几种方法,我提出的最佳解决方案是在批量更新之前进行重新加载.我没有动画,reloadRows因为它似乎与批量更新动画冲突.

[tableView reloadRowsAtIndexPaths:indexPathsToReload withRowAnimation:UITableViewRowAnimationNone];
[tableView beginUpdates];
//inserts, deletes and moves here
[tableView endUpdates];
Run Code Online (Sandbox Code Playgroud)

此外,我通常将我的单元配置逻辑放在一个单独的方法中,如:

- (void)tableView:(UITableView *)tableView configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath;
Run Code Online (Sandbox Code Playgroud)

这样我就可以直接调用它并reloadRowsAtIndexPaths完全绕过它.您也不会以这种方式获得内置动画,但您可以自己制作动画.