我对细胞的重用非常困惑。
我有一张桌子,每个单元格都是一个带有开关的单元格。如果切换开关,则会将该单元格的背景色设置为其他颜色。但是,每次滚动时,这些更改都不会持久。
我将UITalbeViewCell子类化以创建自己的自定义单元格。每个单元都有一个不同的标识符。但是,当我在表格中滚动时,对单元格所做的任何更改仍然不会保存。我读过类似的问题,但没有一个起作用。.一些建议的子类,我做了,有些建议使用了另外的标识符,我也做了...
这是我的表视图的代码。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let key = Array(dataSource[indexPath.section].keys)[indexPath.row]
let cell = CellWithSwitch.init(style: .subtitle, reuseIdentifier: key)
cell.awakeFromNib()
let val = Array(dataSource[indexPath.section].values)[indexPath.row]
cell.switchView?.addTarget(self, action: #selector(self.switchChanged(_:)), for: .valueChanged)
if let index = key.firstIndex(of: "."){
cell.textLabel?.text = String(key.suffix(from: key.index(index, offsetBy: 1)))
}else{
cell.textLabel?.text = key;
}
cell.switchView?.setOn(val, animated: true)
return cell
}
答案 0 :(得分:0)
您可以在switchChange
操作中更改数组值
让我将阵列作为开关,如下所示:
var arrSwitch = [false,false,false,false,false,false,false,false,false,false]
下面是我的cellForRowAt
方法
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "customCell") as! customCell
cell. switchView.setOn(self.arrSwitch[indexPath.row], animated: false)
cell. switchView.tag = indexPath.row
cell. switchView.addTarget(self, action: #selector(self.onSwitchTap(_:)), for: .valueChanged)
return cell
}
这是我的onSwitchTap
动作
@IBAction func onSwitchTap(_ sender: UISwitch) {
self.arrSwitch[sender.tag] = !self.arrSwitch[sender.tag]
}
现在滚动时,它将保留您所做的最后更改。