以编程方式切换 UISwitch,阻止 IBAction 功能
programmatically toggle UISwitch, prevent IBAction function
我有一个 UISwitch
,当它被切换时,IBAction 被触发:
@IBAction func mySwitchToggled( switch_: UISwitch ) {
...
}
因此,当用户切换开关时,将调用上述函数。
有时,我还需要以编程方式切换开关:
mySwitch.setOn(false, animated: false) //It triggers the IBAction function
以上代码触发了IBAction函数。
根据我的特殊要求,我需要在用户切换开关时触发 IBAction 函数,但是当以编程方式切换开关时,我不希望触发 IBAction 函数。
如何在不 触发 IBAction 函数的情况下以编程方式切换我的开关 ?
请看下面,这里swcValueChanged
是Value Changed
函数,只有当用户切换开关时才会调用。
@IBAction func swcValueChanged(_ sender: Any) {
print("Switch value changed")
}
这里是按钮点击事件,上面的函数不会调用。
@IBAction func btnTapped(_ sender: Any) {
swcTemp.setOn(!swcTemp.isOn, animated: true)
}
hmmm... intersting. It gets triggered in my project
我没有足够的代表发表评论,所以我 post 作为 PPL 的回答,他的回答,你检查过你的网点了吗?大多数情况下,情节提要与您的其他 IB 动作保持联系,从而导致它们同时触发。 (删除现有网点并实施价值变更,应该可行)
这是另一个(有点老套的)解决方案,通过代码调用开关时实现一个跳过布尔值:
var skip: Bool = false
@IBAction func mySwitchToggled( switch_: UISwitch ) {
guard !skip else {
skip = false
return
}
// do stuff
}
func someFunc() {
// called it like this
skip = true
mySwitch.setOn(false, animated: false)
}
我有一个 UISwitch
,当它被切换时,IBAction 被触发:
@IBAction func mySwitchToggled( switch_: UISwitch ) {
...
}
因此,当用户切换开关时,将调用上述函数。
有时,我还需要以编程方式切换开关:
mySwitch.setOn(false, animated: false) //It triggers the IBAction function
以上代码触发了IBAction函数。
根据我的特殊要求,我需要在用户切换开关时触发 IBAction 函数,但是当以编程方式切换开关时,我不希望触发 IBAction 函数。
如何在不 触发 IBAction 函数的情况下以编程方式切换我的开关 ?
请看下面,这里swcValueChanged
是Value Changed
函数,只有当用户切换开关时才会调用。
@IBAction func swcValueChanged(_ sender: Any) {
print("Switch value changed")
}
这里是按钮点击事件,上面的函数不会调用。
@IBAction func btnTapped(_ sender: Any) {
swcTemp.setOn(!swcTemp.isOn, animated: true)
}
hmmm... intersting. It gets triggered in my project
我没有足够的代表发表评论,所以我 post 作为 PPL 的回答,他的回答,你检查过你的网点了吗?大多数情况下,情节提要与您的其他 IB 动作保持联系,从而导致它们同时触发。 (删除现有网点并实施价值变更,应该可行)
这是另一个(有点老套的)解决方案,通过代码调用开关时实现一个跳过布尔值:
var skip: Bool = false
@IBAction func mySwitchToggled( switch_: UISwitch ) {
guard !skip else {
skip = false
return
}
// do stuff
}
func someFunc() {
// called it like this
skip = true
mySwitch.setOn(false, animated: false)
}