ios - 如何重新加载以编程方式移动的行?

标签 ios uitableview

令人沮丧的事实:调用 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/

相关文章:

objective-c - 我的 UINavBar 不响应触摸,并随 tableview 滚动

Swift - 以编程方式将 TableView 放置在另一个具有约束的 View 下方

swift - 如何始终将第一个单元格保持在第一个位置

ios - Popover Controller 无法正确显示 View

iOS 8 点击 UITextView 会卡住应用程序

ios - UITableView 滚动到顶部时加载更多数据?

ios - 如何禁用缩放并保留对 UIImagePickerController 的控制?

ios - Sprite 套件。与与重力相反的 applyForce 混淆

ios - 获取 GEOErrorDomain -209

objective-c - 保存 UITableView 单元格附件的状态?