我有一个UISwitch
,当它被切换时,IBAction被触发:
@IBAction func mySwitchToggled( switch_: UISwitch ) {
...
}
因此,当用户切换开关时,将调用上述功能。
在某些时候,我还需要以编程方式切换开关:
mySwitch.setOn(false, animated: false) //It triggers the IBAction function
以上代码触发IBAction函数。
根据我的特殊要求,我需要在用户切换开关时触发IBAction功能,但是当以编程方式切换开关时,我不希望IBAction功能被触发。
如何以编程方式切换我的开关而不用触发IBAction功能?
答案 0 :(得分:3)
嗯......吵架。它在我的项目中被触发
我没有足够的评论来评论所以我把它作为答案发给PPL他的答案,你检查了你的网点。大多数情况下,故事板会保持与其他IB操作的连接,从而导致它们同时触发。 (删除现有网点并实施价值变更,应该有效)
这是另一个(一些hacky)解决方案,通过代码调用switch来实现skip boolean:
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)
}
答案 1 :(得分:1)
请在下面找到,此处swcValueChanged
是Value Changed
功能,只有在用户切换开关时才会调用。
@IBAction func swcValueChanged(_ sender: Any) {
print("Switch value changed")
}
此处按钮点按事件,上面的功能不会调用。
@IBAction func btnTapped(_ sender: Any) {
swcTemp.setOn(!swcTemp.isOn, animated: true)
}