在不重新加载的情况下更新 UITableViewCell
Posted
技术标签:
【中文标题】在不重新加载的情况下更新 UITableViewCell【英文标题】:Update UITableViewCell without reload 【发布时间】:2011-04-07 07:22:59 【问题描述】:这是我的情况:
我有一个 UITableView,其中每个单元格都有一些按钮。 在 cellForRowAtIndexPath 中,我设置了行的索引路径,因此当单击 a 按钮时,我知道单击了哪一行。 其中一个按钮是删除按钮,按下时我会删除支持数据并从表中删除该行。
我遇到的问题是,在我删除一行后,其他行的 indexPath 不正确,因为其他行没有被重绘。我能找到重绘表格的唯一方法是调用 reload 但这会破坏动画。 我想这种问题一定已经解决了。有人对如何解决这个问题有任何建议吗?如果有更好的方法,我可以改变我设计按钮的方式。
【问题讨论】:
你有没有想过解决这个问题? reloadRows 和 reloadSections 对我来说已成为一个可怕的问题,因为在本应没有动画/闪烁时出现了不需要的动画/闪烁。 【参考方案1】:认为你需要使用这个...
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
Apple reference!
【讨论】:
我尝试过使用 reloadSections 版本(因为大部分部分都不正确),但是这个动画效果很糟糕。整张桌子似乎都在闪烁,我可以看到桌子后面的白色。 也许您还需要重新加载它周围的单元格?这背后的数据是什么,就好像你使用 CoreData 它为你处理了很多。【参考方案2】:您应该能够通过像这样开始和结束更新来重绘表格视图而无需完全重新加载:
[tableView beginUpdates];
[tableView endUpdates];
【讨论】:
【参考方案3】:调用方法:
- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
【讨论】:
我正在调用该方法。这会正确删除,但不会重绘其他单元格,因此索引路径不正确。【参考方案4】:最好不要将 indexPath 与按钮一起存储。在按钮操作处理程序(它是您的单元子类或视图控制器中的方法)中,您可以识别单元格,然后使用-indexPathForCell:
确定 indexPath。
【讨论】:
我已经很久没有写这个问题了,但你是对的,这就是我现在处理事情的方式。以上是关于在不重新加载的情况下更新 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在不重新加载页面的情况下使用 javascript/jQuery 更新 URL 或查询字符串?
Firestore 在不重新加载应用程序的情况下不更新 SwiftUI 网格