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)
`我是 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)