【问题标题】:Editing controls disappear on reload重新加载时编辑控件消失
【发布时间】:2012-01-09 01:54:30
【问题描述】:

有点麻烦。

我有一个处于分组模式的 UITableView。该表设置为始终处于编辑模式 - 这工作得很好。我所有的行都是可删除的。这些行是缩进的,我所有的 UITableViewCellEditControls 都显示得很好。

问题是当一行实际被删除时,我更新我的数据源,然后调用:

deleteRowsAtIndexPaths:
reloadRowsAtIndexPaths: //needs to get called because of table aesthetics

重新加载发生后(我也尝试了一个简单的 reloadData),我所有的 UITableViewCellEditControls(带有减号等的红色圆圈)都消失了!这些行仍然缩进,但它们已经消失了。

我已经尝试过这篇文章的建议:

UITableViewController canceling Edit mode animation when calling [table reloadData] inside (void)setEditing

但没有运气。

任何帮助将不胜感激!

【问题讨论】:

  • 我正在使用自定义 UITableViewCell 并认为这可能是问题的一部分......但不行。我只是用普通的旧 UITableViewCell 改变了一些东西,编辑控件仍然消失了。

标签: iphone objective-c uitableview


【解决方案1】:

不看任何代码,我有一些建议。

根据 Apple 的 UITableView Class Reference:在 ReloadData 下,它说:

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

在插入和删除行时不应调用它。

看起来,您允许他们删除单个单元格,因此,我假设以下方法已经实现:tableView:editingStyleForRowAtIndexPath:tableView:commitEditingStyle:forRowAtIndexPath: 在您的 commitEditingStyle 中,您应该只是调用 delete 方法像这样:

[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

这应该消除对任何重新加载数据的需要。如果您不想显示任何动画,则可以使用 noanimation 枚举器代替我在示例中显示的淡入淡出。

但是,如果您仍然认为每次删除单元格后都需要重新加载数据,不妨试试performSelector:afterDelay:

希望这个花絮能有所帮助!

【讨论】:

  • 嗨,Bittu,感谢您的信息!我没有意识到不应该在插入/删除行时进行重新加载调用 - 回答了为什么表运行错误。问题是这样的:我正在完全自定义分组 uitableview 的外观,其中包括阴影的顶部、中间和底部行。由于美学要求,顶行和底行(特别是由于阴影)需要比中间行大 10px。现在,如果用户删除 TOP 行,第 2 行现在成为顶行 - 这意味着它的高度和背景图像需要更新......有没有更简单的方法?
  • 您可以采取多种方式。使用 KVO,您可以监控顶部和底部的阴影大小并进行相应调整。此外,可能有一些方法可以将一些阴影作为部分页眉和页脚的一部分,所以它看起来像是附加到第一行和最后一行。只是抛出一些想法来尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 1970-01-01
相关资源
最近更新 更多