UITableView删除控制和删除按钮未同步

时间:2013-05-19 23:26:46

标签: objective-c cocoa-touch ios6 uitableview

我看到了我的表视图的一个非常奇怪的行为: 我启用了UITableViewEditingStyleDelete,它在tableView左侧的编辑模式中显示一个红色的“ - ”控件。如果我点击该控件,则会出现右侧的删除按钮,并且“ - ”控件将被打开。一切都还可以,但如果我多次这样做,有时“ - ”控件是水平的,但删除按钮是可见的: enter image description here

这可能与刷新tableView有关吗?我应该在编辑模式下禁用它们吗?

是否有人看到类似的东西或知道如何解决它?

2013年5月20日更新: 我现在检查每个NSFetchedResultControllerDelegate回调,如果我的tableView正在编辑,如果是,我不更新tableView,这将修复该bug。当tableView从正常模式下的编辑返回时,我调用[tableView reloadData]以使tableView是最新的并包含最新信息。

但这会摧毁动画。有人有一个想法,我如何更新我的tableView而不会丢失动画?问题是,tableView不知道在编辑模式下发生了什么。

非常感谢你的帮助!

Linard

1 个答案:

答案 0 :(得分:0)

动画丢失只是在编辑模式下停用更新的一部分。另一件事是,如果在编辑模式下添加或删除一行,则必须实现[tableView reloadData]。 我认为更好的解决方案是通过NSFetchedResultController停用任何单元格内容更新。内容经常在我的表中发生变化,但在编辑单元格时并不重要。如果表能够添加或删除任何未停用的单元格,则tableView行和部分保持更新,因此您只需要在编辑模式结束时更新行,而不是使用[tableView]更新整个tableView reloadData]。 使用此解决方案,您可以获得所有动画,在插入或删除行时没有用于tableView的其他更新代码,在编辑模式结束时,您可以毫不费力地将tableView更新为CorePlot数据的状态。

更新: 玩完之后,我看到,这个错误的出现方式和以前一样,只是不常见。 我认为问题是,[tableView beginUpdates]和[tableView endUpdates]的调用方式与之前相同,这可能会导致错误。 我没有改回[tableView reloadData]并且我在编辑期间没有停用任何更新,因为这是我到目前为止找到的唯一方法(即使我丢失了我的动画)。

如果有人有其他想法或一些改进,请告诉我。

Linard