将除tableViewCell中的当前以外的所有UISwitch设置为OFF

时间:2018-12-18 15:45:20

标签: ios swift uitableview uiswitch

我需要用户只能从单元格中选择一个值。

@objc func switchChangedPeriod(_ sender : UISwitch!){
    if sender.isOn{
        periodUserString = period[sender.tag].periodUser
        periodSystemString = period[sender.tag].periodSystem
        //sender.setOn(false, animated: true) how to set OFF all switches except current
    }else{
        periodUserString = ""
        periodSystemString = ""
    }
}

或者也许我只需要将先前的UISwitch设置为OFF?

1 个答案:

答案 0 :(得分:0)

首先为您的delegate子类创建UITableViewCell,并在更改其值时声明switch的功能。

protocol CellDelegate {
    func switchChangedValue(_ value: Bool, period: Period)
}

现在在子类内部创建delegateperiod变量,并在更改其值时为开关创建IBAction

class YourCell: UITableViewCell {

    var delegate: CellDelegate?
    var period: Period?
    ...
    @IBAction func switchChanged(_ sender: UISwitch) {
        delegate?.switchChangedValue(sender.isOn, period: period!)
    }
}

接下来让我们为控制器中的选定Period创建全局变量

var selectedPeriod: Period?

现在将您的委托实施为ViewController并将periodUserStringperiodSystemString设置为正确的格式,并且如果值是true则将selectedPeriod设置为{{1} },如果开关已关闭,请将其设置为period。最后,重新加载TableView数据

nil

...在这里,您应该考虑是否需要在拥有class ViewController: UIViewController, CellDelegate { ... func switchChangedValue(_ value: Bool, period: Period) { periodUserString = value ? period.periodUser : "" periodSystemString = value ? period.periodSystem : "" selectedPeriod = value ? period : nil tableView.reloadData() } } 变量时设置periodUserStringperiodSystemString

{{1}中是否设置了selectedPeriod状态取决于UISwitch是否等于索引中等于cellForRowAt的数组中的某些selectedPeriod(请注意,现在您的period类/结构必须是 codable )。同样不要忘记设置单元格的indexPath.rowPeriod

delegate