UITextField必须包含最少的字符才能激活UIButton

时间:2018-12-23 11:52:15

标签: swift uitextfield

`我是Xcode / Swift的新手,无法弄清楚如何使UITextField在激活UIButton(例如-Next)之前要求最少字符数(例如-7)。

如果用户未在UITextField(例如-密码字段)中输入至少7个字符,则UIButton(例如-“ Next”)将保持无效状态。但是,当用户确实在UITextField中输入7个或更多字符时,UIButton将被激活并正常工作(单击进入下一个屏幕)。

以下是我的View Controller代码。有问题的UITextField是“ passwordField”,UIButton是“ toViewController3”:

import UIKit

class ViewController2: UIViewController, UITextFieldDelegate {

@IBOutlet weak var passwordField: UITextField!

@IBAction func toViewController3(_ sender: Any) {
    print("button pressed")
    self.performSegue(withIdentifier: "ViewController2ToViewController3Segue", sender: self)
}

@IBAction func backToViewController1(_ sender: Any) {
    print("back button pressed")
    self.performSegue(withIdentifier: "ViewController2ToViewController1Segue", sender: self)

}

override func viewDidLoad() {
    super.viewDidLoad()
    print("ViewController2 has loaded")

    passwordField.delegate = self
    passwordField.becomeFirstResponder()

}

// Hide Keyboard when touch on screen
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    self.view.endEditing(true)
    print("Keyboard Hidden by Screen Tap")
}

// Hide keyboard when Return key is pressed
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    passwordField.resignFirstResponder()
    print("Keyboard Hidden by Return Key")
    return true
}

}

}

2 个答案:

答案 0 :(得分:2)

首先,您需要参考按钮(将按钮的默认状态设置为禁用

@IBOutlet weak var someButton: UIButton!

使用.editingChanged的目标

第一个创建操作,当用户在TextField中键入或删除字符时调用该操作。如果TextField的text至少包含7个字符,请启用按钮,否则请禁用

@IBAction func textFieldChangedValue(_ sender: UITextField) {
    someButton.isEnabled = sender.text!.count >= 7
}

然后将事件.editingChanged的目标添加到您的TextField中(您不必通过编程的方式来实现)

textField.addTarget(self, action: #selector(textFieldChangedValue(_:)), for: .editingChanged)

使用委托方法shouldChangeCharactersIn

使用shouldChangeCharactersIn TextField的委托方法,该方法在用户键入或删除任何字符时被调用

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if textField == passwordField {
        let countAfter = textField.text!.count + string.count - range.length
        someButton.isEnabled = countAfter >= 7
    }
    return true
}

答案 1 :(得分:0)

let text = UITextField()
text.addTarget(self, action: #selector(textFieldChanged(_:)), for: .valueChanged)

@objc func textFieldChanged(_ textField: UITextField) {
    if textField.text?.count > 7 {
        // active button
    } else {
        // disable button
    }
}