同时检查所有文本字段并仅在有文本时启用按钮
check all textfields simultaneously & only enable button if they have text
我想根据密码和确认密码文本字段中的文本启用和更改按钮的颜色。所以我在网上找到了这段代码:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let tfConfirmPasswordText = (tfConfirmPassword.text! as NSString).replacingCharacters(in: range, with: string)
if tfConfirmPasswordText.isEmpty {
btnContinue.backgroundColor = UIColor(named: "labelColor")
btnContinue.isEnabled = false
}
else if tfPassword.text != "" && !tfConfirmPasswordText.isEmpty {
btnContinue.backgroundColor = UIColor(named: "accentColor")
btnContinue.isEnabled = true
}
return true
}
此代码确实有效,使用这些条件,它将根据 confirmPassword
文本字段启用或禁用继续按钮。
但问题是,在填充 password
和 confirmPassword
文本字段后,如果我从 password
字段中删除文本,它仍会保持按钮启用状态,并且仅在从 [=11] 中删除文本时才禁用它=] 文本字段。
如果我在 viewDidLoafd()
中将 password.delegate = self
与 confirmPassword.delgate = self
并排放置,当我在任何文本字段中放置超过 1 个字符时它会崩溃。
有没有办法通过始终检查两个文本字段而不是只检查一个来启用或禁用按钮。确认密码文本字段?
我认为你错过了一个测试:
而不是
if tfConfirmPasswordText.isEmpty
我会写
if tfConfirmPasswordText.isEmpty || tfpasswordText.isEmpty
我没有使用 shouldChangeCharactersIn ,而是像下面那样使用它来使其工作
override func viewDidLoad() {
super.viewDidLoad()
//initially at disabled
disabledButton()
[tfPassword, tfConfirmPasswordText].forEach({ [=10=].addTarget(self, action: #selector(textFieldEditingDidChange), for: .editingChanged) })
}
@objc func textFieldEditingDidChange(sender: UITextField) {
guard
let tfPasswordTxtValue = tfPassword.text, !tfPasswordTxtValue.isEmpty,
let tfConfirmPasswordTextValue = tfConfirmPasswordText.text, !tfConfirmPasswordTextValue.isEmpty
else {
disabledButton()
return
}
enableButton()
}
func disabledButton(){
btnContinue.backgroundColor = UIColor(named: "labelColor")
btnContinue.isEnabled = false
}
func enableButton(){
btnContinue.isEnabled = true
}
我想根据密码和确认密码文本字段中的文本启用和更改按钮的颜色。所以我在网上找到了这段代码:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let tfConfirmPasswordText = (tfConfirmPassword.text! as NSString).replacingCharacters(in: range, with: string)
if tfConfirmPasswordText.isEmpty {
btnContinue.backgroundColor = UIColor(named: "labelColor")
btnContinue.isEnabled = false
}
else if tfPassword.text != "" && !tfConfirmPasswordText.isEmpty {
btnContinue.backgroundColor = UIColor(named: "accentColor")
btnContinue.isEnabled = true
}
return true
}
此代码确实有效,使用这些条件,它将根据 confirmPassword
文本字段启用或禁用继续按钮。
但问题是,在填充 password
和 confirmPassword
文本字段后,如果我从 password
字段中删除文本,它仍会保持按钮启用状态,并且仅在从 [=11] 中删除文本时才禁用它=] 文本字段。
如果我在 viewDidLoafd()
中将 password.delegate = self
与 confirmPassword.delgate = self
并排放置,当我在任何文本字段中放置超过 1 个字符时它会崩溃。
有没有办法通过始终检查两个文本字段而不是只检查一个来启用或禁用按钮。确认密码文本字段?
我认为你错过了一个测试: 而不是
if tfConfirmPasswordText.isEmpty
我会写
if tfConfirmPasswordText.isEmpty || tfpasswordText.isEmpty
我没有使用 shouldChangeCharactersIn ,而是像下面那样使用它来使其工作
override func viewDidLoad() {
super.viewDidLoad()
//initially at disabled
disabledButton()
[tfPassword, tfConfirmPasswordText].forEach({ [=10=].addTarget(self, action: #selector(textFieldEditingDidChange), for: .editingChanged) })
}
@objc func textFieldEditingDidChange(sender: UITextField) {
guard
let tfPasswordTxtValue = tfPassword.text, !tfPasswordTxtValue.isEmpty,
let tfConfirmPasswordTextValue = tfConfirmPasswordText.text, !tfConfirmPasswordTextValue.isEmpty
else {
disabledButton()
return
}
enableButton()
}
func disabledButton(){
btnContinue.backgroundColor = UIColor(named: "labelColor")
btnContinue.isEnabled = false
}
func enableButton(){
btnContinue.isEnabled = true
}