我有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
的用户界面已更改为其他状态。
如何阻止这种情况发生?
答案 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
}