我的 iOS 应用程序中有一个登录屏幕,有以下两种方法可以进入此登录页面:
登录屏幕中有两个文本字段(电子邮件和密码)和一个按钮。如果用户来自欢迎屏幕,我希望该按钮仅在用户手动填写所有文本字段后启用。在这种情况下我没有问题。我用这行代码
extension LoginlVC : UITextFieldDelegate {
@objc func editingChanged(_ textField: UITextField) {
// to make signUpButton enable when all text field is filled out
if textField.text?.count == 1 {
if textField.text?.first == " " {
textField.text = ""
return
}
}
guard
let email = emailTextField.text, !email.isEmpty,
let password = passwordTextField.text, !password.isEmpty
else {
loginButton.alpha = 0.4
loginButton.isEnabled = false
return
}
loginButton.alpha = 1
loginButton.isEnabled = true
}
}
但是如果用户在完成注册过程后来自注册屏幕,我使用prepare for segue
将电子邮件和密码字符串从注册屏幕发送到登录屏幕,因此登录屏幕中的文本字段将在注册过程后自动填充。
我希望登录屏幕中的按钮已启用,但不幸的是,它没有发生。
那么如何在接收到值后启用登录屏幕中的按钮prepare for segue
?
editingChanged
callback 仅在用户编辑textField
s时调用,而不是在您以text
编程方式设置其属性时调用。这意味着您的转场代码准备不会触发editingChanged
- 因此按钮不会更新其状态。
我建议跟随。将现有代码重构为以下内容:
@objc func editingChanged(_ textField: UITextField) {
// to make signUpButton enable when all text field is filled out
if textField.text?.count == 1 {
if textField.text?.first == " " {
textField.text = ""
return
}
}
updateLoginButton()
}
func updateLoginButton() {
guard
let email = emailTextField.text, !email.isEmpty,
let password = passwordTextField.text, !password.isEmpty
else {
loginButton.alpha = 0.4
loginButton.isEnabled = false
return
}
loginButton.alpha = 1
loginButton.isEnabled = true
}
然后updateLoginButton
在填写数据后调用准备转场代码以确保loginButton
处于正确状态(并且您可以在任何想要确保状态正确的地方调用它)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句