UITextField 必须具有最少字符数才能激活 UIButton

UITextField must have minimum characters to activate UIButton

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

如果用户没有在 UITextField 中输入至少 7 个字符(例如-密码字段),UIButton(例如-"Next")将保持不活动状态。但是,当用户在 UITextField 中输入 7 个或更多字符时,UIButton 将被激活并正常工作(点击进入下一个屏幕)。

下面是我的视图控制器代码。有问题的 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
}

}

}
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
    }
}

使用 .editingChanged

的目标

创建在用户键入或从 TextField 中删除字符时调用的操作(控制事件 .editingChanged)。然后根据 TextField 的 text 是否至少有 7 个字符设置按钮的 isEnabled 属性。

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

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

使用 RxSwift

如果您熟悉使用RxSwift库,您可以简单地观察rx.text.orEmpty控制UITextField的属性,在map中您可以验证文本,然后您可以将其绑定到按钮的 rx.isEnabled 活页夹。

textField.rx.text.orEmpty
    .map { [=11=].count >= 7 }
    .bind(to: yourButton.rx.isEnabled)
    .disposed(by: bag)