UITableView删除并重新加载单元格

我在UITableView中删除了一些行,如下所示:

[tableView deleteRowsAtIndexPaths:toDelete withRowAnimation:UITableViewRowAnimationAutomatic]; 

这为删除操作添加了一个很好的animation。

但是,删除后,我需要更新所有当前可见的行。 调用

 [tableView reloadData]; 

第一个电话工作后,但好的animation效果没有了。 什么是更好的方法来做到这一点? 即animation删除操作,并更新所有当前可见的行? 谢谢!

我需要这样做的原因是每个单元格都包含一个“checkbox”。 我的视图控制器是checkbox的委托,每个checkbox都有一个NSIndexPath与它关联。 当checkbox被切换,委托被称为告诉它嘿,我们切换到X索引path。 现在,如果删除了一些行,索引path需要更新。 这就是为什么我需要重新加载一切,所以每个checkbox知道它属于哪里。

注意: 正如评论中指出的那样, 这个答案很可能不起作用 如果不被接受,我会删除它。

我不是100%肯定这是做到这一点的最好方法,但有一些令人愉快的清洁。 修改底层模型之后,我们可以在常规UIViewanimation块中包装reloadData

 // if self.people is a mutable array [self.people removeObjectAtIndex:13]; [UIView animateWithDuration:0.5 animations:^{ [self.tableView reloadData]; }]; 

无论持续多久,ctrahey的animation块都不适用于我。 我研究了UITableView的删除,插入和重新加载的机制。 我正在Github中维护我的项目来解决这个问题。

https://github.com/VansonLeung/VanTableController

它包含一个工作unit testing。 通常为了给UITableView的单元animation制作animation,我们必须做这样的事情:

 [tableView_ beginUpdates]; [tableView_ deleteRowsAtIndexPaths: indexPathDelete withRowAnimation:UITableViewRowAnimationAutomatic]; [tableView_ insertRowsAtIndexPaths: indexPathInsert withRowAnimation:UITableViewRowAnimationAutomatic]; [tableView_ reloadRowsAtIndexPaths: indexPathReload withRowAnimation:UITableViewRowAnimationAutomatic]; [tableView_ endUpdates]; 

我们必须确定删除行,插入行和重新加载行的indexPath数组,这是一个非常讨厌的工作! 我的项目工作基本上是一个生成这些indexPaths的包装。

我有一些相关的问题。 使用固定的索引可能会面临很多头痛的问题。 我已经解决了这个添加到UITableViewCell从我的数据源,而不是一个NSIndexPath一个项目的引用。 所以,不需要使用保存到你的单元格中的indexPath。

此外,苹果网站上有一些信息说,我们不能在插入或删除方法中使用reloadData方法。

苹果文档

所有这些方法重新加载用于构造表的所有数据,包括单元格,节标题和页脚,索引数组等等。 为了提高效率,表格视图只会重新显示那些可见的行。 如果表格由于重新加载而缩小,它会调整偏移量。 表视图的委托或数据源在希望表视图完全重新加载其数据时调用此方法。 不应该在插入或删除行的方法中调用,特别是在用beginUpdates和endUpdates调用实现的animation块中