有一个包含不同问题类型的各种不同的XIB文件的表视图。其中一个问题是多选项答案。对于此行类型,行本身由另一个tableview组成每一行都有一个标签和开关,用于显示该问题的选项数,并且在该内部表上方有一个总开关,用于将该问题标记为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)
                    }
                }

            }
       }

最佳答案

基本上避免直接操作视图(单元格),除非您别无选择。
给你一个。创建适当的模型并使用控制器进行更改。
对于包含开关的表视图,使用具有Foo属性的自定义类(我们称之为isSelected)作为数据源模型。
cellForRow中,将开关的isOn属性设置为isSelected状态。
子类化表视图单元格,并为开关添加属性FooIBAction
cellForRow中,将Foo实例传递给自定义单元格,以便能够更新isSelected中的IBAction属性。由于引用语义的原因,这些更改在数据源中持续存在。
要取消选择开关,请调用dataSourceArray.forEach {$0.isSelected = false}undtableView.reloadData()
另一个巨大的好处是,您可以访问所有交换机的状态,甚至是当前不可见的单元的状态。

关于swift - 取消选择表 View 中的所有开关,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43864744/

10-13 04:07