有一个表视图,其中包含针对不同问题类型的各种不同xib文件。一个这样的问题是多选项答案。对于此行类型,行本身由另一个表视图组成,每行都有一个标签和开关,用于该问题的选项数量以及此内部表格上方的整体开关,以将此问题标记为na。所以当点击这个na开关时,我需要取消选择内排中存在的所有开关。我尝试过以下方法,但是如果有这么多选项,内部表格中的所有单元格都不可见在屏幕上,我就会遇到问题:
@IBAction func switchChange(_ sender: UISwitch) {
let mcAnswerTable = sender.superview?.superview?.superview?.superview as! UITableView
for rows in mcAnswerTable.visibleCells {
if condition {
if let row = rows as? MCAnswerCell {
row.enabled.setOn(false, animated: true)
}
}
}
}
答案 0 :(得分:2)
基本上避免直接操纵视图(单元格),除非你别无选择。
这里有一个。创建适当的模型并使用控制器进行更改。
Foo
)并将isSelected
属性作为数据源模型。cellForRow
中,将交换机的isOn
属性设置为isSelected
状态。Foo
和IBAction
的属性。cellForRow
中将Foo
实例传递给自定义单元格,以便能够更新isSelected
中的IBAction
属性。由于引用语义,数据源中的更改仍然存在。dataSourceArray.forEach {$0.isSelected = false}
和tableView.reloadData()
另一个巨大的好处是,即使是当前不可见的单元格,您也可以访问所有开关的状态。