Ios 数据更改后更新tableViewCells属性
我在tableViewController中显示了一系列清单项目。每个项目都包含在tableViewCell中,选中项目时,该单元格的背景色将从白色变为绿色。我可以按预期选中和取消选中项目以及单元格的颜色更改 我添加了一个重置按钮,将所有项目更改为未选中状态。我测试了重置功能,项目正在重置,但是tableViewCells没有更新到正确的颜色,它们保持在最后的状态。我试过使用Ios 数据更改后更新tableViewCells属性,ios,swift,swift3,Ios,Swift,Swift3,我在tableViewController中显示了一系列清单项目。每个项目都包含在tableViewCell中,选中项目时,该单元格的背景色将从白色变为绿色。我可以按预期选中和取消选中项目以及单元格的颜色更改 我添加了一个重置按钮,将所有项目更改为未选中状态。我测试了重置功能,项目正在重置,但是tableViewCells没有更新到正确的颜色,它们保持在最后的状态。我试过使用 tableView.reloadData() 及 但这似乎对细胞没有任何影响 我的重置功能位于模型中: func re
tableView.reloadData()
及
但这似乎对细胞没有任何影响
我的重置功能位于模型中:
func resetCheckedStatus(for items: [Item]) -> [Item] {
var resetItems: [Item] = []
for item in items {
item.isChecked = false
resetItems.append(item)
}
return resetItems
}
我在tableViewController中的重置操作
@IBAction func resetItems(_ sender: Any) {
let title = "Reset Items"
let message = "Are you sure you want to reset all items to unchecked status?"
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
let okAction = UIAlertAction(title: "OK", style: .default, handler: {action in self.items = resetCheckedStatus(for: self.items)} )
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
alert.addAction(cancelAction)
alert.addAction(okAction)
present(alert, animated: true, completion: nil)
self.tableView.reloadData()
if let indexPaths = self.tableView.indexPathsForVisibleRows {
tableView.reloadRows(at: indexPaths, with: .automatic)
}
}
更改项目数组后,需要重新加载表视图。将重载表视图代码移动到okAction的处理程序块中,如下所示
let okAction = UIAlertAction(title: "OK",
style: .default, handler{action in
self.items = resetCheckedStatus(for: self.items)
self.tableView.reloadData()} )
更改项目数组后,需要重新加载表视图。将重载表视图代码移动到okAction的处理程序块中,如下所示
let okAction = UIAlertAction(title: "OK",
style: .default, handler{action in
self.items = resetCheckedStatus(for: self.items)
self.tableView.reloadData()} )
你需要发布你的
cellForRow(在:)
方法。我的猜测是,你没有完全配置你的细胞后,回收它们。请记住,退出队列的单元格可以保持上次使用时的状态,包括对其背景颜色的更改。您不能假设它将处于默认状态。您需要发布cellForRow(at:)
方法。我的猜测是,你没有完全配置你的细胞后,回收它们。请记住,退出队列的单元格可以保持上次使用时的状态,包括对其背景颜色的更改。你不能假设它将处于默认状态。就是这样!请详细说明为什么需要在处理程序块中调用reloadData(),而不是在之后调用?只有在点击警报上的“确定”按钮后,才会调用处理程序闭包。闭包是一个自包含的功能块,虽然它们看起来是内联的,但实际上并不是按顺序执行的。因此,在您的示例代码中,即使在模型对象被resetCheckedStatus方法修改之前,表视图也将重新加载!请详细说明为什么需要在处理程序块中调用reloadData(),而不是在之后调用?只有在点击警报上的“确定”按钮后,才会调用处理程序闭包。闭包是一个自包含的功能块,虽然它们看起来是内联的,但实际上并不是按顺序执行的。因此,在示例代码中,即使在resetCheckedStatus方法修改模型对象之前,表视图也将重新加载。