Ios 如何在使用另一个UISwitch时更新一个UISwitch

Ios 如何在使用另一个UISwitch时更新一个UISwitch,ios,swift,Ios,Swift,案例:我有两个UI开关-开关1和开关2。 Switch1控制我的场景中UILabel的可见性。 开关2一旦激活,将关闭开关1及其可视性 问题:激活开关2后,开关1关闭并消失,但我的UILabel在场景中仍然可见 switch1.addTarget(self, action: #selector(switch1Action), for: UIControl.Event.valueChanged) switch2.addTarget(self, action: #selector(switch2Ac

案例:我有两个UI开关-开关1和开关2。 Switch1控制我的场景中UILabel的可见性。 开关2一旦激活,将关闭开关1及其可视性

问题:激活开关2后,开关1关闭并消失,但我的UILabel在场景中仍然可见

switch1.addTarget(self, action: #selector(switch1Action), for: UIControl.Event.valueChanged)
switch2.addTarget(self, action: #selector(switch2Action), for: UIControl.Event.valueChanged)


    @objc func switch1Action(switch1: UISwitch) {
        if switch1.isOn {

            lockedMessage.isHidden = false
            }
        if !switch1.isOn {

            lockedMessage.isHidden = true
        }
    }

    @objc func switch2Action(switch2: UISwitch) {

        if switch2.isOn {

            switch1.isOn = false
            switch1.isHidden = true

        }

非常感谢!:)

这是正确的和期望的行为。由于您显式更改了值,因此由您决定如何处理更改后的值

这样做的原因是,在通过用户交互通知控件的值发生更改后,显式更改控件的值并不少见。如果显式状态更改导致事件再次触发,则最终将进入无限循环。“@rmaddy”


已弃用(自原始问题更新后):

您(可能是意外地)设置了一个不相关的条件来隐藏
标签。(什么是
moveWall
?)

请尝试以下方法:

@objc func switch1Action(switch1: UISwitch) {
    lockedMessage.isHidden = !switch1.isOn
    ,,,
}

这是正确和期望的行为。由于您显式更改了值,因此由您决定如何处理更改后的值

这样做的原因是,在通过用户交互通知控件的值发生更改后,显式更改控件的值并不少见。如果显式状态更改导致事件再次触发,则最终将进入无限循环。“@rmaddy”


已弃用(自原始问题更新后):

您(可能是意外地)设置了一个不相关的条件来隐藏
标签。(什么是
moveWall
?)

请尝试以下方法:

@objc func switch1Action(switch1: UISwitch) {
    lockedMessage.isHidden = !switch1.isOn
    ,,,
}

以编程方式设置
switch1.isOn
不会触发
switch1操作
。您需要从
switch2Action
隐藏消息标签

有关参考信息,请参见:

将开关设置到任一位置都不会导致发送操作消息


以编程方式设置
switch1.isOn
不会触发
switch1操作
。您需要从
switch2Action
隐藏消息标签

有关参考信息,请参见:

将开关设置到任一位置都不会导致发送操作消息


如果我正确理解您的问题,那么如果开关2也打开,您似乎希望隐藏lockedMessage。如果是这种情况–您可以在函数Switch2操作中更改锁定消息的可见性

@objc func switch2Action(switch2: UISwitch) {

    if switch2.isOn {
        switch1.isOn = false
        switch1.isHidden = true
        lockedMessage.isHidden = true
    }

如果我正确理解您的问题,那么如果开关2也打开,您似乎希望隐藏lockedMessage。如果是这种情况–您可以在函数Switch2操作中更改锁定消息的可见性

@objc func switch2Action(switch2: UISwitch) {

    if switch2.isOn {
        switch1.isOn = false
        switch1.isHidden = true
        lockedMessage.isHidden = true
    }

我的问题是,如果Switch2关闭Switch1,为什么swift看不到Switch1的状态已经改变,因此在Switch1操作中运行代码?否则,我现在只是在switchActions中重复代码。这是正确的和期望的行为。检查答案。好的,谢谢大家,大家都准备好了,感谢你们的帮助。我的问题是,如果Switch2关闭Switch1,为什么swift看不到Switch1的状态已经改变,因此在Switch1操作中运行代码?否则,我现在只是在switchActions中重复代码。这是正确的和期望的行为。检查答案。好的,谢谢,每个人都很好,感谢你的帮助。是的,这是一种方法,谢谢。虽然现在我在多个函数中重复我的代码。是的,这是一种方法,谢谢。虽然现在我在多个函数中重复我的代码。