一旦在UIText字段中输入数字,如何启用IBAction

问题描述 投票:0回答:1

我对编程很陌生,需要帮助。

我正在尝试构建一个简单的计算器。简而言之:在数字中插入两个UITextField。有IBAction(buttonCalculate)执行计算+还有另一个IBAction(buttonClear)清除插入文本字段中的数据。启动应用程序后,两个IBAction按钮均被禁用。目标是在插入数字后启用IBAction(buttonCalculate)。如果用户插入其他任何字符,然后输入数字,则需要显示一条警告消息(warrningSign2),告诉用户仅接受一个数字。

有人可以给我小费/提示我应该如何进行吗?

谢谢!

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var Value: UITextField!
    @IBOutlet weak var field1: UITextField!
    @IBOutlet weak var field2: UITextField!
    @IBOutlet weak var buttonClear: UIButton!
    @IBOutlet weak var buttonCalculate: UIButton!
    @IBOutlet weak var warrningSign: UITextField!
    @IBOutlet weak var warrningSign2: UITextField!

    func appLoad () {
    buttonClear.isEnabled = false
    buttonClear.backgroundColor = .gray
    if field1.text == "" || field1.text == "" {
        warrningSign.textColor = .red
        butonCalculate.isEnabled = false
        butonCalculate.backgroundColor = .gray}

    }
    override func viewDidLoad() {
    super.viewDidLoad()
    appLoad()

    }

    @IBAction func calculate(_ sender: Any) {
        buttonClear.isEnabled = true
        buttonClear.backgroundColor = UIColor(red: 74/255, green: 105/255, blue:187/255, alpha: 1)
        Value.text = String(Float(field1.text!)! + Float(field2.text!)!)
    }

    @IBAction func Clear(_ sender: Any) {
        Value.text = "Value"
        self.field1.text = nil
        self.field2.text = nil
    }
}
ios swift uitextfield
1个回答
0
投票
  1. UITextFieldfield1field2Keyboard类型更改为Number Pad或仅接受数字类型。

  2. 您可以通过添加以下行来捕获发送到UITextField控件的字符:

    textField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
    
  3. textFieldDidChange委托方法中,您可以获取文本并根据需要进行验证。

我建议更新如下代码,

 @IBAction func calculate(_ sender: Any) {
    calculateAction()
 }

 private func calculateAction() {
    buttonClear.isEnabled = true
    buttonClear.backgroundColor = UIColor(red: 74/255, green: 105/255, blue:187/255, alpha: 1)
    Value.text = String(Float(field1.text!)! + Float(field2.text!)!)
  }

然后在calculateAction()中调用textFieldDidChange()

© www.soinside.com 2019 - 2024. All rights reserved.