代码之家  ›  专栏  ›  技术社区  ›  Tigran Iskandaryan

更新表视图上的所有单元格,而不使操作对内存来说太“繁重”

  •  0
  • Tigran Iskandaryan  · 技术社区  · 7 年前

    我有一个 table view 具有 cells ,并且在执行左扫操作时,它们可以显示复选标记(复选标记只是 UIView ,哪个属性 isHidden 设置为true)。

    我还有一个 UIButton 另一方面 view controller ,并且当用户点击它时,应删除所有复选标记。我通过使用协议和 bool 委托的计算属性。该属性是从协议调用的。

    以下是方法实现:

    extension ItemsTableViewController: UncheckAllCheckedItemsDelegate {
    func uncheckAllCheckedItemsButtonDidTapped() {
        if checkedItems.count > 0 {
            checkedItems.removeAll()
            shouldShowCheckmarks = false
        }
    }
    
    }
    

    来自物业观察员( didSet ),我打电话 reloadData() 在上 表视图 .

    下面是它的样子:

    var shouldShowCheckmarks: Bool = false {
        didSet {
    
            tableView.reloadData()
        }
    }
    

    我在中使用此属性 表视图 的数据源方法 tableView(_:, cellForRawAt:) 这样地:

     cell.checkMarkView.isHidden = !shouldShowCheckmarks
    

    它工作正常,所有单元格都会得到更新(即使是那些当前不可见的单元格)。

    现在,我不确定这是否是更新所有 细胞 在内存使用方面。如果你知道更好的方法,我将非常感谢你的帮助。

    1 回复  |  直到 7 年前
        1
  •  1
  •   vacawama    7 年前

    您所需要做的就是更新可见单元格的复选标记。幸运的是,有一个属性 UITableView 帮你打电话 visibleCells .

    不调用重新加载数据:

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

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