gpt4 book ai didi

ios - 如何从 CustomCell 重置 tableview 中的所有开关

转载 作者:行者123 更新时间:2023-11-30 11:30:53 24 4
gpt4 key购买 nike

我已将 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 有两种类型(文本/开关),saveData 方法如下所示

func saveData(_ data: Any?) {
self.data = data
}

当 Switch 更改时,表格不会更新,但由于该类一次只处理一行操作,我不确定如何从自定义 Switch 类更新 TableView

最佳答案

这将是设置每个单元的 switchAction 的 Controller 的职责。

当调用 switchAction 闭包时,闭包的提供者必须根据需要更新其数据模型并重新加载 TableView 。

您需要将 cellForRowAt 中的 switchAction 更新为如下所示:

cell.switchAction = { isOn in
thisRow.saveData(isOn)

// This switch is on, reset all of the other row data
if isOn {
for (index, row) in rowData.enumerated() {
if index != indexPath.row && row.type == .switch {
row.saveData(false)
}
}

tableView.reloadData()
}
}

关于ios - 如何从 CustomCell 重置 tableview 中的所有开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50274781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com