【问题标题】:Switch control to toggle isHidden切换控件以切换 isHidden
【发布时间】:2018-09-21 09:33:56
【问题描述】:

我有一个带有两个开关控件的应用,可以根据它们的打开或关闭状态隐藏或显示一些文本字段。

问题是第一个开关似乎控制了第二个。

如果第一个开关关闭,则第二个开关也关闭。我希望他们彼此独立工作。 有什么建议吗?

谢谢大家

@IBAction func switchP(_ sender: UISwitch) {
    if (sender.isOn == true) {
        textFieldP.isHidden = false
    } else {
        textFieldP.isHidden = true
    }
}

@IBAction func switchT(_ sender: UISwitch) {
    if (sender.isOn == true) {
        textFieldT.isHidden = false
    } else {
        textFieldT.isHidden = true
    }
}

【问题讨论】:

  • 显示您的 IBOutlet IBAction 连接,确保它们连接正确
  • 情节提要中的 Action 连接配置不正确。
  • Swift != 切换
  • 顺便说一句,sender.isOnBool,因此无需针对 true 进行测试。只需if sender.isOn {。而且,如果这就是您的代码所做的全部,那么 textFieldP.isHidden = !sender.isOn 就是您所需要的。
  • 注意:== true 是多余的,也不需要括号。正确的 Swift 形式是这样的:if sender.isOn {

标签: swift xcode uiswitch


【解决方案1】:

首先,替换

if (sender.isOn == true) {
    textFieldP.isHidden = false
} else {
    textFieldP.isHidden = true
}

简单的一行:

textFieldP.isHidden = !sender.isOn

其次,使用 Connections Inspector(右侧面板,圆圈中的箭头)并确保您的引用插座没有在同一个 IBAction 下混合或重复。

【讨论】:

    【解决方案2】:

    除了使用if/else 语句指定.isHidden = true 之外,您应该使用相反的属性引用,这是一种更好的方法。

    @IBAction var switchP: [UIView] {
    didSet {
        textFieldP.forEach {
          $0.isHidden = true
          }
       }
    }
    

    并根据点击进行更改:

    @IBAction func switchP(_ sender: UISwitch) {
        UIView.animate(withDuration: 0.2) {
            self.switchP.forEach {
                $0.isHidden = !$0.isHidden
            }
        }
    }
    

    这是我在没有看到你所有代码的情况下一般能回答的最好的答案。

    【讨论】:

    • 这似乎是一个好方法。我不知道。我会试试看。谢谢
    猜你喜欢
    • 2018-08-12
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2010-11-04
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多