Swift 实时检查文本字段输入
Swift checking textfield input live
我一直在努力寻找如何在用户输入时检查文本字段的输入。
如果用户键入一个词,它应该根据一些定义的规则更改标签和图像。
我的代码可以正常工作,但我总是落后一步。 (因为它总是在输入下一个字符之前读取内容。
如果只是为了检查长度,我可以使用 countElements(textfield) + 1,但我希望它也表明用户在输入时不能使用某些字符,因此这不适用于检查不需要的字符.
我假设我使用的功能不正确 "shouldChangeCharacters"。所以我对使用什么有点迷茫。有没有办法将 println 或 NSLog 命令读取到 return 到插座?
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let passwordcheck = UserPasswordTextField.text
if UserPasswordTextField.isFirstResponder() {
if isValidPassword(passwordcheck) {
PWimg.image = UIImage(named: "passwordapprovedicon")
} else if passwordcheck.isEmpty {
PWimg.image = UIImage(named: "passwordiconwrong")
} else {
PWimg.image = UIImage(named: "passwordiconwrong")
}
}
func isValidPassword(testStr2:String) -> Bool {
println("validate password: \(testStr2)")
let passwordRegEx = "[A-Z0-9a-z._%+-:/><#]{6,30}"
if let passwordTest = NSPredicate(format: "SELF MATCHES %@", passwordRegEx) {
return passwordTest.evaluateWithObject(testStr2)
}
return false
侦听来自文本字段的 UIControlEventEditingChanged
事件。通过
注册他们
Interface Builder:从文本字段拖到文件,select 动作类型 "Editing Changed"
以下代码:
override func viewDidLoad() {
super.viewDidLoad()
// ...
textField.addTarget(self, action:"edited", forControlEvents:UIControlEvents.EditingChanged)
}
func edited() {
println("Edited \(textField.text)")
}
已更新 swift 3:
override func viewDidLoad() {
super.viewDidLoad()
//...
textField.addTarget(self, action: #selector(textFieldDidChange), for:.editingChanged)
}
func textFieldDidChange(){
print(textField.text)
}
针对 swift 4.2 进行了更新:只需将 @objc 添加到 func textFieldDidChange()
override func viewDidLoad()
{
super.viewDidLoad()
textField.addTarget(self,
action : #selector(textFieldDidChange),
for : .editingChanged)
}
@objc func textFieldDidChange()
{ print(textField.text ?? "Doh!") }
我一直在努力寻找如何在用户输入时检查文本字段的输入。
如果用户键入一个词,它应该根据一些定义的规则更改标签和图像。
我的代码可以正常工作,但我总是落后一步。 (因为它总是在输入下一个字符之前读取内容。
如果只是为了检查长度,我可以使用 countElements(textfield) + 1,但我希望它也表明用户在输入时不能使用某些字符,因此这不适用于检查不需要的字符.
我假设我使用的功能不正确 "shouldChangeCharacters"。所以我对使用什么有点迷茫。有没有办法将 println 或 NSLog 命令读取到 return 到插座?
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let passwordcheck = UserPasswordTextField.text
if UserPasswordTextField.isFirstResponder() {
if isValidPassword(passwordcheck) {
PWimg.image = UIImage(named: "passwordapprovedicon")
} else if passwordcheck.isEmpty {
PWimg.image = UIImage(named: "passwordiconwrong")
} else {
PWimg.image = UIImage(named: "passwordiconwrong")
}
}
func isValidPassword(testStr2:String) -> Bool {
println("validate password: \(testStr2)")
let passwordRegEx = "[A-Z0-9a-z._%+-:/><#]{6,30}"
if let passwordTest = NSPredicate(format: "SELF MATCHES %@", passwordRegEx) {
return passwordTest.evaluateWithObject(testStr2)
}
return false
侦听来自文本字段的 UIControlEventEditingChanged
事件。通过
Interface Builder:从文本字段拖到文件,select 动作类型 "Editing Changed"
以下代码:
override func viewDidLoad() { super.viewDidLoad() // ... textField.addTarget(self, action:"edited", forControlEvents:UIControlEvents.EditingChanged) } func edited() { println("Edited \(textField.text)") }
已更新 swift 3:
override func viewDidLoad() {
super.viewDidLoad()
//...
textField.addTarget(self, action: #selector(textFieldDidChange), for:.editingChanged)
}
func textFieldDidChange(){
print(textField.text)
}
针对 swift 4.2 进行了更新:只需将 @objc 添加到 func textFieldDidChange()
override func viewDidLoad()
{
super.viewDidLoad()
textField.addTarget(self,
action : #selector(textFieldDidChange),
for : .editingChanged)
}
@objc func textFieldDidChange()
{ print(textField.text ?? "Doh!") }