令人沮丧的事实:调用 tableView:moveRowAtIndexPath:toIndexPath:
后,tableView:cellForRowAtIndexPath:
不会为该行调用。
在 UITableView
更新 block 中 tableView:moveRowAtIndexPath:toIndexPath:
之后或之前调用 reloadRowsAtIndexPaths:withRowAnimation:
也不起作用:它引发不一致错误。
我看到了 2 种解决方法:删除+插入而不是移动或在另一个更新 block 中重新加载。
我的问题是:是否有其他方法可以在同一更新 block 中重新加载和移动 UITableView 的行?
最佳答案
我认为不可能同时进行移动和重新加载。我尝试了几种方法,我想出的最佳解决方案是在批量更新之前进行重新加载。我没有为 reloadRows
设置动画,因为它似乎与批量更新动画冲突。
[tableView reloadRowsAtIndexPaths:indexPathsToReload withRowAnimation:UITableViewRowAnimationNone];
[tableView beginUpdates];
//inserts, deletes and moves here
[tableView endUpdates];
此外,我通常将我的单元格配置逻辑放在一个单独的方法中,例如:
- (void)tableView:(UITableView *)tableView configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath;
这样我就可以直接调用它并完全绕过 reloadRowsAtIndexPaths
。您也不会通过这种方式获得内置动画,但您可以制作自己的动画。
关于ios - 如何重新加载以编程方式移动的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18084087/