【问题标题】:deselect all switches in a tableview取消选择表格视图中的所有开关
【发布时间】:2017-05-09 08:25:59
【问题描述】:

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

            }
       }

【问题讨论】:

    标签: swift uitableview swift3 switch-statement


    【解决方案1】:

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

    给你一个。创建一个合适的 model 并使用 controller 进行更改。


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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多