首页 > 解决方案 > Swift 4 - 基于不同的 TextField 输入启用/禁用两个 UI 按钮

问题描述

我觉得我缺少此代码集的基本步骤,并且非常感谢任何见解,因为尽管搜索了这些论坛,但我找不到一个很好的解决方案。

我有四个文本字段、两个 UI 按钮和两个标签。

当前三个文本字段输入时,应该启用其中一个 UI 按钮,允许我计算这三个文本字段的总和并将其显示在第一个标签上。

仅当第四个文本字段具有输入时,才应启用第二个 UI 按钮。第二个标签将包含所有四个文本字段的总和。如果不满足这些条件,则应禁用 UI 按钮。

我的第一种情况很好,但是当我尝试合并第四个文本字段和第二个按钮时,事情变得一团糟。查看最后一个片段:让 regurgVTI = AIVTI.text, !regurgVTI.isEmpty

类 AICalc: UIViewController {

@IBOutlet weak var PISARadius: UITextField!
@IBOutlet weak var aliasingVelocity: UITextField!
@IBOutlet weak var AIVMax: UITextField!
@IBOutlet weak var AIVTI: UITextField!
@IBOutlet weak var EROAAnswer: UILabel!
@IBOutlet weak var RegurgVolumeAnswer: UILabel!
@IBOutlet weak var calcEROAButton: UIButton!
@IBOutlet weak var regurgVolumeButton: UIButton!

@IBAction func calcEROA(_ sender: UIButton)
{
    EROAAnswer.text = String(Int(PISARadius.text!)! + Int(aliasingVelocity.text!)! + Int(AIVMax.text!)!)
}

@IBAction func calcRegurgVolume(_ sender: UIButton)
{
    RegurgVolumeAnswer.text = String(Int(PISARadius.text!)! + Int(aliasingVelocity.text!)! + Int(AIVMax.text!)! + Int(AIVTI.text!)!)
}

override func viewDidLoad()
{
    super.viewDidLoad()
    calcEROAButton.isEnabled = false
    regurgVolumeButton.isEnabled = false
    PISARadius.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
    aliasingVelocity.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
    AIVMax.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
    AIVTI.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
@objc func editingChanged(_ textField: UITextField) {
    if textField.text?.count == 1 {
        if textField.text?.first == " " {
            textField.text = ""
            return
        }
    }
    guard
        let pisa = PISARadius.text, !pisa.isEmpty,
        let aliasing = aliasingVelocity.text, !aliasing.isEmpty,
        let vmax = AIVMax.text, !vmax.isEmpty
        else {
            calcEROAButton.isEnabled = false
            regurgVolumeButton.isEnabled = false
            return
    }
    calcEROAButton.isEnabled = true

  let regurgVTI = AIVTI.text, !regurgVTI.isEmpty

}

}

标签: inputuibuttontextfield

解决方案


使用 textField.tag 或 textField.identifier 来识别文本字段,然后您可以轻松解决您的问题。

假设您的第一个三个文本字段同时具有标签 1,2,3。

然后在您的文本字段中进行 end_Enditing :-

if textfield.tag == 1 {
      //Do whatever you want
}
if textfield.tag == 2 {
      //Do whatever you want
}
if textfield.tag == 3 {
      //Do whatever you want
}

参考this可能会解决您的问题。好运。


推荐阅读