`我是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
}
}
}
答案 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
}
}