Я установил Switch как часть ячейки tableView и настроил класс CustomCell для работы с действием. Этот класс выглядит следующим образом
class SwitchTableViewCell: UITableViewCell {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var `switch`: UISwitch!
var switchAction: ((Bool) -> Void)?
@IBAction func switchSwitched(_ sender: UISwitch) {
switchAction?(sender.isOn)
}
}
Теперь мне нужно убедиться, чточто когда один коммутатор включен, все остальные коммутаторы в других строках выключены.Строки таблицы загружаются следующим образом
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let thisRow = rowData[indexPath.row]
switch thisRow.type {
case .text:
guard let cell = tableView.dequeueReusableCell(withIdentifier: "textfieldCell", for: indexPath) as? MovingTextFieldTableViewCell else {
Logger.shared.log(.app, .error, "Could not load TextFieldTableViewCell")
fatalError()
}
cell.textField.textFieldText = thisRow.data as? String
cell.textField.labelText = thisRow.title
cell.dataChanged = { text in
thisRow.saveData(text)
}
cell.errorLabel.text = nil
return cell
case .switch:
guard let cell = tableView.dequeueReusableCell(withIdentifier: "switchCell", for: indexPath) as? SwitchTableViewCell else {
Logger.shared.log(.app, .error, "Could not load SwitchTableViewCell")
fatalError()
}
cell.label.text = thisRow.title
cell.switch.isOn = thisRow.data as? Bool ?? false
cell.switchAction = { isOn in
thisRow.saveData(isOn)
}
return cell
}
}
В этой строке есть два типа thisRow (Text / Switch), а метод saveData выглядит следующим образом
func saveData(_ data: Any?) {
self.data = data
}
Таблица не являетсяобновляется при изменении Switch, но поскольку класс имеет дело только с одним действием строки за раз, я не уверен, как обновить TableView из пользовательского класса Switch