Swift TableView单元格不会使用其他标识符保存状态

时间:2019-03-25 19:48:25

标签: swift uitableview

我对细胞的重用非常困惑。

我有一张桌子,每个单元格都是一个带有开关的单元格。如果切换开关,则会将该单元格的背景色设置为其他颜色。但是,每次滚动时,这些更改都不会持久。

我将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
}

1 个答案:

答案 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]
    }

现在滚动时,它将保留您所做的最后更改。