ios - 如何在不调用 reloadData 的情况下删除 UITableView 中的行并更新 indexPaths?

标签 ios uitableview animation row

[更新]

我发现了问题。我已经创建了一个自定义的 UITableViewCell,并且没有使用标准方法来触发删除。我的自定义 UITableViewCell 有一个自定义的 indexPath 属性,我在创建单元格时填充它。这就是为什么它在没有调用重新加载数据的情况下不会得到更新的原因。

作为解决方法,为了尽量减少代码重写,我使用标记为答案的解决方案。

[/UPDATE]

我看过其他类似的问题,但不太一样......

我有一个 UITableView,它从 NSArray 中的对象获取它的行(单元格)。使用 indexPath.row 将行映射到 NSArray。这意味着 NSArray 中索引为 0 的对象对应于 indexPath.row 为 0 的单元格。

每当我删除一行时,我都会从 NSArray 中删除该对象(如许多示例所示,包括 Apple 的文档)。

问题是,无论何时删除一行,索引路径都不会更新。例如:

我有一个包含 3 行的 TableView 。这意味着我有 indexPath.row 0、1 和 2。此外,相应的 NSArray 对象的索引为 0、1 和 2。

当我从 UITableView 中删除第 1 行并删除 NSArray 中的相应对象时,剩下的是 indexPath.row 1 和 2,但 NSArray 的索引是 0 和 1。

如果我尝试从 UITableView 中删除现在的第二行,我会遇到一个问题,因为它的 indexPath.row 是 2,但是 NSArray 中对应的对象的索引是 1。

换句话说,indexPath.row 和对象索引不再“同步”。

人们建议使用 UITableView 的 reloadData 方法...这实际上会“重置”indexPaths,但会中断 UITableView 的行动画。

我怎样才能删除行,更新 indexPaths 并仍然保持 UITableView 的动画?!

最佳答案

未测试,但我能想到的一些事情是延迟重新加载,直到动画完成。或者使用以下方法重新加载这些行而不是整个表:

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

延迟:

[tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.5];

关于ios - 如何在不调用 reloadData 的情况下删除 UITableView 中的行并更新 indexPaths?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16243598/

相关文章:

objective-c - 将数据从一个 View Controller 传递到另一个 View Controller

ios - 如何将 JSON 对象插入数组?

ios - 从 API 填充数组时可能出现计时问题

iOS swift : autoresize collection view nested inside a table view cell

ios - 在 Swift 中加载其他元素后,在 TableViewCell 中异步加载一个元素

Jquery 和 css3 动画在 Safari 5 中滞后

c++ - 将 SDL_PeepEvents 从 SDL 1.2.14 迁移到 SDL 1.3

ios - 有没有办法在 iOS 中使用表格 View 设计类似 Tinder/Twitter-self-profile 的标题效果?

animation - 如何在sencha touch 2中更改选项卡面板上设置随机动画?

android - libgdx 中使用单独纹理的动画