我有table view
cells
,他们可以在执行左侧滑动操作时显示复选标记(复选标记只是UIView
,属性isHidden
获取设为真)。
我在另一个UIButton
上也有view controller
,当用户点按它时,应删除所有复选标记。我通过在委托上使用协议和bool
计算属性来实现它。该属性从协议中调用。
以下是方法实现:
extension ItemsTableViewController: UncheckAllCheckedItemsDelegate {
func uncheckAllCheckedItemsButtonDidTapped() {
if checkedItems.count > 0 {
checkedItems.removeAll()
shouldShowCheckmarks = false
}
}
}
从属性(didSet
)的属性观察者,我在reloadData()
上调用table view
。
这是它的样子:
var shouldShowCheckmarks: Bool = false {
didSet {
tableView.reloadData()
}
}
我在table view
的数据源方法tableView(_:, cellForRawAt:)
中使用此属性,如下所示:
cell.checkMarkView.isHidden = !shouldShowCheckmarks
它工作正常,所有单元格都会更新(即使那些当前不可见的单元格)。
现在,我不确定这是否是在内存使用方面更新所有cells
的最佳方法。如果您知道更好的方法,我将非常感谢您的帮助。
答案 0 :(得分:1)
您需要做的就是更新可见单元格的复选标记。幸运的是,UITableView
有一个属性可以帮助您调用visibleCells
。
而不是调用重新加载数据:
for cell in tableView.visibleCells {
// update the check mark for this cell
cell.checkMarkView.isHidden = !shouldShowCheckmarks
}
只要您更新了模型数据,您的不可见单元格就会在下次加载时做正确的事情。