令人沮丧的事实:在召唤之后tableView:moveRowAtIndexPath:toIndexPath:,tableView:cellForRowAtIndexPath:不会被召唤出那一行.
在更新块reloadRowsAtIndexPaths:withRowAnimation:之后或之前调用也不起作用:它会引发不一致错误.tableView:moveRowAtIndexPath:toIndexPath:UITableView
我看到2个解决方法:删除+插入而不是移动或在另一个更新块中重新加载.
我的问题是:是否有其他方法可以重新加载并在同一个更新块中移动UITableView的行?
我认为不可能同时进行移动和重新加载.我已经尝试了几种方法,我提出的最佳解决方案是在批量更新之前进行重新加载.我没有动画,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完全绕过它.您也不会以这种方式获得内置动画,但您可以自己制作动画.
| 归档时间: |
|
| 查看次数: |
2297 次 |
| 最近记录: |