以编程方式切换UISwitch,防止IBAction功能

时间:2018-04-12 12:14:16

标签: ios uiswitch

我有一个UISwitch,当它被切换时,IBAction被触发:

@IBAction func mySwitchToggled( switch_: UISwitch ) {
        ...
}

因此,当用户切换开关时,将调​​用上述功能。

在某些时候,我还需要以编程方式切换开关

mySwitch.setOn(false, animated: false) //It triggers the IBAction function

以上代码触发IBAction函数。

根据我的特殊要求,我需要在用户切换开关时触发IBAction功能,但是当以编程方式切换开关时,我不希望IBAction功能被触发。

如何以编程方式切换我的开关而不用触发IBAction功能?

2 个答案:

答案 0 :(得分:3)

  嗯......吵架。它在我的项目中被触发

我没有足够的评论来评论所以我把它作为答案发给PPL他的答案,你检查了你的网点。大多数情况下,故事板会保持与其他IB操作的连接,从而导致它们同时触发。 (删除现有网点并实施价值变更,应该有效)

这是另一个(一些hacky)解决方案,通过代码调用switch来实现s​​kip 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)

请在下面找到,此处swcValueChangedValue Changed功能,只有在用户切换开关时才会调用。

@IBAction func swcValueChanged(_ sender: Any) {
    print("Switch value changed")
}

此处按钮点按事件,上面的功能不会调用。

@IBAction func btnTapped(_ sender: Any) {
    swcTemp.setOn(!swcTemp.isOn, animated: true)
}