【问题标题】:how to make a button enable after the textfield is filled out if we get data from segue如果我们从 segue 获取数据,如何在填写文本字段后启用按钮
【发布时间】:2018-01-11 11:01:00
【问题描述】:

我的 iOS 应用中有一个登录屏幕,有以下两种方式可以进入这个登录页面:

  1. 从欢迎屏幕
  2. 用户在注册屏幕中完成注册过程后。

登录屏幕中有两个文本字段(电子邮件和密码)和一个按钮。如果用户来自欢迎屏幕,我希望该按钮仅在用户手动填写所有文本字段后启用。在这种情况下我没有问题。我用这行代码

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 的值后,如何在登录屏幕上启用我的按钮?

【问题讨论】:

  • 你试过我的答案了吗?
  • 是的,谢谢。已经接受了你的回答

标签: ios swift


【解决方案1】:

editingChanged 回调仅在用户编辑 textFields 时调用,而不是在您以编程方式设置其 text 属性时调用。这意味着您准备 segue 代码不会触发 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
}

然后在您填写数据后在您的准备 segue 代码中调用 updateLoginButton 以确保 loginButton 处于正确状态(并且您可以在任何您想确保状态的地方调用它正确)。

【讨论】:

    【解决方案2】:

    将此添加到 viewDidLoad

    loginButton.isEnabled = emailTextField.isEmpty  
    loginButton.alpha = emailTextField.isEmpty ? 1.0 : 0.4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      相关资源
      最近更新 更多