更新表视图上的所有单元格而不进行操作"重"对于记忆

时间:2018-02-12 15:27:35

标签: ios swift uitableview protocols

我有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的最佳方法。如果您知道更好的方法,我将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您需要做的就是更新可见单元格的复选标记。幸运的是,UITableView有一个属性可以帮助您调用visibleCells

而不是调用重新加载数据:

for cell in tableView.visibleCells {
    // update the check mark for this cell
    cell.checkMarkView.isHidden = !shouldShowCheckmarks
}

只要您更新了模型数据,您的不可见单元格就会在下次加载时做正确的事情。