警报弹出窗口没有显示

时间:2016-07-28 19:50:09

标签: ios swift

我的项目中有一些代码:

@IBAction func createAccountAction(sender: AnyObject) {
    if self.emailField.text == "" || self.passwordField.text == ""
    {
        let alertController = UIAlertController(title: "Oops!", message: "Please enter an email and password.", preferredStyle: .Alert)

        let defaultAction = UIAlertAction(title: "OK", style: .Cancel, handler: nil)
        alertController.addAction(defaultAction)

        self.presentViewController(alertController, animated: true, completion: nil)
    }
    else
    {
        FIRAuth.auth()?.createUserWithEmail(self.emailField.text!, password: self.passwordField.text!) { (user, error) in

            if error == nil
            {
                let alertController = UIAlertController(title: "Done", message: "Account created!", preferredStyle: .Alert)

                let defaultAction = UIAlertAction(title: "OK", style: .Cancel, handler: nil)
                alertController.addAction(defaultAction)
                self.emailField.text = ""
                self.passwordField.text = ""



            }
            else
            {
                let alertController = UIAlertController(title: "Oops!", message: error?.localizedDescription, preferredStyle: .Alert)

                let defaultAction = UIAlertAction(title: "OK", style: .Cancel, handler: nil)
                alertController.addAction(defaultAction)

                self.presentViewController(alertController, animated: true, completion: nil)
            }

正如你在上一个else语句中看到的那样,我有一个alertController,其中包含消息Oops,点击 createAccountAction 按钮时会显示。

但是当用户按下按钮并且没有填写文本字段中的任何内容时,就会发生这种情况。

现在我想要的是,当用户成功填写文本字段时,同一个弹出窗口应该与我指定的其他文本一起出现。

当我运行代码时,它会执行部分

 self.emailField.text = ""
 self.passwordField.text = ""

但不提供AlertController。

我如何实现我的目标?

2 个答案:

答案 0 :(得分:0)

您只是在“if else”声明的“else”部分中显示警报控制器。

另外重构的例子,以确保不会发生这样的错误:

    var title: String!
    var message: String!

    if let error = error {
        title = "Oops!"
        message = error.localizedDescription

    } else {
        title = "Done"
        message = "Account created!"

        self.emailField.text = ""
        self.passwordField.text = ""
    }

    let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
    let defaultAction = UIAlertAction(title: "OK", style: .Cancel, handler: nil)
    alertController.addAction(defaultAction)
    self.presentViewController(alertController, animated: true, completion: nil)

答案 1 :(得分:0)

你错过了这一行:

 self.presentViewController(alertController, animated: true, completion: nil)

应该在以下之后:

self.emailField.text = ""
self.passwordField.text = ""

所以你没有提出警报。

另外。您可以将整个函数更改为更简单的函数:

@IBAction func createAccountAction(sender: AnyObject) {

   if self.emailField.text == "" || self.passwordField.text == "" {

        let title = "Oops"
        let message = "Please enter an email and password."

        let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
        let defaultAction = UIAlertAction(title: "OK", style: .Cancel, handler: nil)
        alertController.addAction(defaultAction)
        self.presentViewController(alertController, animated: true, completion: nil)

    } else {
        FIRAuth.auth()?.createUserWithEmail(self.emailField.text!, password: self.passwordField.text!) { (user, error) in

            var title : String
            var message : String

            if error == nil {
                title = "Done"
                message = "Account created!"
                self.emailField.text = ""
                self.passwordField.text = ""
            } else {
                title = "Oops!"
                message = "error?.localizedDescription"
            }

        let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
        let defaultAction = UIAlertAction(title: "OK", style: .Cancel, handler: nil)
        alertController.addAction(defaultAction)
        self.presentViewController(alertController, animated: true, completion: nil)

        }
    }
}