防止UISwitch更改UI状态

时间:2016-03-03 11:38:32

标签: ios swift return uiswitch

我有UISwitch执行操作。我需要显示带有是/否选项的警报。如果用户选择选项,则不会发生任何事情。交换机的用户界面不应该改变。

这是我的代码。

func toggleSwitchValueChanged(sender: UISwitch) {
    let alert = UIAlertController(title: "", message: "This operation will reset the photos you have renamed already. Proceed?", preferredStyle: .Alert)
    alert.addAction(UIAlertAction(title: "No", style: .Cancel) { action in
        return
    })
    alert.addAction(UIAlertAction(title: "Yes", style: .Default) { action in
        self.api.includeCoverPhoto(sender.on)
    })
    alert.preferredAction = alert.actions[1]
    presentViewController(alert, animated: true, completion: nil)
}

我在UISwitch的值更改事件中触发了此方法。

问题是如果我选择,则操作不会继续。但UISwitch的用户界面已更改为其他状态。

如何阻止这种情况发生?

3 个答案:

答案 0 :(得分:5)

    func toggleSwitchValueChanged(sender: UISwitch) {
        let alert = UIAlertController(title: "", message: "This operation will reset the photos you have renamed already. Proceed?", preferredStyle: .Alert)
        alert.addAction(UIAlertAction(title: "No", style: .Cancel) { action in
             sender.setOn(true, animated:false)               
             return
    })
    ....

答案 1 :(得分:2)

在交换机更改后,值已更改的操作方法被称为,因此您不能这样做。

您需要禁用交换机的用户交互,然后在其顶部覆盖UIButton。在按钮的修饰内部动作中显示警报,或者根据您更喜欢的方式触摸按下。

然后在按钮操作中,显示警报并以编程方式更改开关状态。

答案 2 :(得分:2)

如果你想将switchValueChanged中的switch.isOn参数改为此

DispatchQueue.main.async {
    self.switch.isOn = !sender.isOn // true or false
}