取消选择tableview

时间:2017-05-09 08:25:59

标签: swift uitableview swift3 switch-statement

有一个表视图,其中包含针对不同问题类型的各种不同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)
                    }
                }

            }
       }

1 个答案:

答案 0 :(得分:2)

基本上避免直接操纵视图(单元格),除非你别无选择。

这里有一个。创建适当的模型并使用控制器进行更改。

  • 对于包含开关的表视图,使用自定义类(我们称之为Foo)并将isSelected属性作为数据源模型。
  • cellForRow中,将交换机的isOn属性设置为isSelected状态。
  • 对表格视图单元格进行子类化,并为切换添加FooIBAction的属性。
  • cellForRow中将Foo实例传递给自定义单元格,以便能够更新isSelected中的IBAction属性。由于引用语义,数据源中的更改仍然存在。
  • 要取消选择,请致电dataSourceArray.forEach {$0.isSelected = false}tableView.reloadData()

另一个巨大的好处是,即使是当前不可见的单元格,您也可以访问所有开​​关的状态。