如何防止 UITableViewCell 在部分刷新时丢失其选择状态?

Posted

技术标签:

【中文标题】如何防止 UITableViewCell 在部分刷新时丢失其选择状态?【英文标题】:How to prevent a UITableViewCell from losing its selection state on section refresh? 【发布时间】:2018-12-06 11:11:54 【问题描述】:

我有一个 UITableViewCell 被选中,但是当我调用这段代码时:

self.tableView.beginUpdates()
self.tableView.reloadSections(IndexSet(integer: 0), with: .none)    
self.tableView.endUpdates()

它失去了选择状态,但即使我做了这两件事:

self.tableView.beginUpdates()
self.tableView.reloadSections(IndexSet(integer: 0), with: .none)
tableView.selectRow(at: IndexPath(row: 0, section: 0), animated: false, scrollPosition: .none)    
self.tableView.endUpdates()

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
// get cell
cell.setSelected(true, animated: false)

单元格失去其选择状态一秒钟,这是故障。我希望单元格的外观即使在眨眼时也保持不变。

注意:我将日志语句放在通常的 shouldHighlight 和 didUnSelect 等方法中,但没有受到这些人的打击。

【问题讨论】:

你为什么使用beginUpdates()endUpdates()?仅当您对 tableView 进行多次操作时才需要这些操作,这些操作应该一起动画.. 我已经添加了答案.. 【参考方案1】:

不要将代码行包含在beginUpdates()endUpdates() 中。这将启动“动画事务”以将tableView 操作一起动画化。我假设在这种情况下 tableView 会运行动画,即使您将 .none 设置为动画,也会以故障结束。

【讨论】:

以上是关于如何防止 UITableViewCell 在部分刷新时丢失其选择状态?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 UITableViewCell 重复和重用?

如何防止 UITableViewCell 内的手势干扰 UITableView 的滚动?

如何使用 RxSwift disposeBag 防止 UITableViewCell 中重复的 UIButton 点击

java接口怎么防止被刷

揭秘:网上抽奖系统如何防止刷奖

如何防止 UITextField 显示多行?