如何在UIAlertController中验证电子邮件地址?

时间:2019-06-28 17:32:41

标签: ios swift xcode uialertcontroller

我正在尝试设置此UIAlertController,以便在输入正确的电子邮件地址之前“注册”按钮不起作用。 (包含一个@符号)。

有关如何执行此操作的任何建议?尝试过其他文章,但解决方案不起作用,Swift newb在这里。

我已包含以下代码:

@IBAction func loginTapped(_ sender: UIButton) {
    //The user is not logged in, so prompt for their email address        
    let loginAlert = UIAlertController(title: "Sign Up For LivNao", message: 
                     "Please enter your email address to join the LivNao study", 
                     preferredStyle: UIAlertController.Style.alert)
    loginAlert.addAction(UIAlertAction(title: "Cancel", style: 
                                       UIAlertAction.Style.cancel, handler: nil))
    loginAlert.addAction(UIAlertAction(title: "Sign Up", style: 
                         UIAlertAction.Style.default, handler: { 
                                             (action: UIAlertAction) in
                                              self.handleLogin(loginAlert)
                         }))
    loginAlert.addTextField { (textField : UITextField) in
        textField.placeholder = "Enter email"
    }
    loginAlert.view.setNeedsLayout()
    self.present(loginAlert, animated: true, completion: nil)
}

1 个答案:

答案 0 :(得分:0)

检查一下。

var signUp: UIAlertAction!

override func viewDidLoad() {
   super.viewDidLoad()
   // Do any additional setup after loading the view, typically from a nib.

        let loginAlert = UIAlertController(title: "Sign Up For LivNao", message: "Please enter your email address to join the LivNao study", preferredStyle: UIAlertController.Style.alert)
        let cancel = UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel, handler: nil)
        loginAlert.addAction(cancel)
        signUp = UIAlertAction(title: "Sign Up", style: UIAlertAction.Style.default, handler: { (action: UIAlertAction) in
            //self.handleLogin(loginAlert)
        })
        loginAlert.addAction(signUp)
        loginAlert.addTextField { (textField : UITextField) in
            textField.placeholder = "Enter email"
            textField.delegate = self
        }

        signUp.isEnabled = false
        loginAlert.view.setNeedsLayout()
        self.present(loginAlert, animated: true, completion: nil)

    }

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool{
        signUp.isEnabled = isValidEmail(testStr: textField.text!) ? true : false
        return true;
    }

    func isValidEmail(testStr:String) -> Bool {
        let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"

        let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
        return emailTest.evaluate(with: testStr)
    }