Быстрая ячейка таблицы не сохраняет состояние с другим идентификатором - PullRequest
0 голосов
/ 25 марта 2019

Я очень смущен повторным использованием клеток.

У меня есть таблица, каждая ячейка - это ячейка с переключателем на ней. Если я переключаю переключатель, я устанавливаю цвет фона этой ячейки на другой цвет. Однако каждый раз, когда я прокручиваю, эти изменения не сохраняются.

Я создаю подкласс 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 голосов
/ 26 марта 2019

Вы можете изменить значение массива в switchChange action

позволяет мне взять массив для переключения, как показано ниже:

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

Теперь на свитке сохранятся последние сделанные вами изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...