Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 更新表视图上的所有单元格,而不使操作对内存来说太“繁重”_Ios_Swift_Uitableview_Protocols - Fatal编程技术网

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

Ios 更新表视图上的所有单元格,而不使操作对内存来说太“繁重”,ios,swift,uitableview,protocols,Ios,Swift,Uitableview,Protocols,我有一个带有单元格的表视图,当执行左扫操作时,它们可以显示一个复选标记。复选标记只是一个UIView,其属性isHidden设置为true 我在另一个视图控制器上也有一个UIButton,当用户点击它时,所有的复选标记都应该被删除。我通过在委托上使用协议和bool computed属性来实现这一点。该属性是从协议中调用的 以下是方法实现: extension ItemsTableViewController: UncheckAllCheckedItemsDelegate { func unche

我有一个带有单元格的表视图,当执行左扫操作时,它们可以显示一个复选标记。复选标记只是一个UIView,其属性isHidden设置为true

我在另一个视图控制器上也有一个UIButton,当用户点击它时,所有的复选标记都应该被删除。我通过在委托上使用协议和bool computed属性来实现这一点。该属性是从协议中调用的

以下是方法实现:

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

}
在属性didSet的属性观察器中,我在表视图上调用reloadData

下面是它的样子:

var shouldShowCheckmarks: Bool = false {
    didSet {

        tableView.reloadData()
    }
}
我在table view的数据源方法tableView_u1;:,cellForRawAt:中使用此属性,如下所示:

 cell.checkMarkView.isHidden = !shouldShowCheckmarks
它工作正常,所有单元格都会得到更新,即使是那些当前不可见的单元格


现在,我不确定这是否是在内存使用方面更新所有单元格的最佳方式。如果您知道更好的方法,我将非常感谢您的帮助。

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

不调用重新加载数据:

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

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

Show。你的密码你问我们你在做什么是否正常,但你没有告诉我们你在做什么。我们应该只是猜测吗?@matt,我已经更新了我的问题是的,这绝对是一个更好的解决方案。谢谢你的帮助