【问题标题】:Swift 4 hidden buttons not reappearingSwift 4 隐藏按钮不再出现
【发布时间】:2018-04-22 03:55:34
【问题描述】:

这是对我之前的问题here 的跟进。我能够很好地隐藏按钮,但是当我选择大学教育选项时它们不会重新出现。这是我的代码:

@IBOutlet weak var eduField: UITextField!   
var education = ["Middle School Education", "High School Education", "College Education"]   
var eduPicker = UIPickerView()

@IBOutlet weak var associate: UIButton!

@IBOutlet weak var bachelor: UIButton!

@IBOutlet weak var master: UIButton!
override func viewDidLoad() {
    super.viewDidLoad()
    eduPicker.delegate = self
    eduPicker.dataSource = self
    eduField.inputView = eduPicker

    if eduField.text == "College Education"{
      associate.isHidden = false
      bachelor.isHidden = false
      master.isHidden = false
    }
    else{
      associate.isHidden = true
      bachelor.isHidden = true
      master.isHidden = true
  }
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return education.count
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    eduField.text = education[row]
    eduField.resignFirstResponder()
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return education[row]
    }
}

我知道我的代码是部分正确的,因为这些按钮隐藏或出现是我将 else 中的值从 false 更改为 true 但我想我不完全理解这些值是如何存储在取景器中的,因为我的代码显然没有'不承认我告诉它的价值观。在 24 小时内两次询问大致相同的问题时,我感到非常愚蠢,但这让我发疯。有人可以帮帮我吗?

【问题讨论】:

    标签: swift xcode swift4 uipickerview xcode9


    【解决方案1】:

    您似乎没有更新按钮状态。

    我建议采用如下方法:

    func updateButtonsVisibility() {
        if eduField.text == "College Education"{
          associate.isHidden = false
          bachelor.isHidden = false
          master.isHidden = false
       } else {
           associate.isHidden = true
           bachelor.isHidden = true
           master.isHidden = true
       }
    }
    

    然后在viewDidLoad()func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 的末尾调用相同的方法。

    【讨论】:

    • 哦,我现在明白了。谢谢!
    • 没问题!尽管这不是您问题的一部分,但我建议您查看enums。在您的示例中使用enum 的目的是将您的education 数组转换为enum,这将帮助您防止比较像if eduField.text == "College Education" 这样的字符串。这不是最佳实践,因为您很容易打错字并在应用程序中出现意外行为,从而使调试更加复杂。请参阅spin.atomicobject.com/2016/08/04/swift-enums-hard-coded-stringsandrewcbancroft.com/2014/09/02/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多