呈现后,UIAlert立即被解雇。迅速

时间:2018-10-07 04:02:36

标签: swift3

如果用户名和密码为nil,我试图显示“ UIAlert”。当我点击注册按钮而不填写详细信息时,它显示了一个警报。没事。但是Alert出现后将立即被解雇。这不是让我点击“确定”。这是我的代码。任何帮助表示赞赏。

import UIKit

class RegisterViewController: UIViewController {

    @IBOutlet weak var newUserNameField: UITextField!
    @IBOutlet weak var newPasswordField: UITextField!
    let defaults = UserDefaults.standard
    var registeredUsers = [String]()
    var passwordArr = [String]()

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func registerButtonPressed(_ sender: Any) {
        if (newUserNameField.text == "") && (newPasswordField.text == "")  {
            let alert = UIAlertController(title: "Oops", message: "All fields must not be left blank when proceeding!", preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
            self.present(alert, animated: true, completion: nil)
        }

        if defaults.object(forKey: "usernames") != nil {
            registeredUsers = defaults.array(forKey: "usernames") as! [String]
            passwordArr = defaults.array(forKey: "passwords") as! [String]
        }

    // create a new account
        registeredUsers.insert(newUserNameField.text!, at: registeredUsers.count)
        passwordArr.insert(newPasswordField.text!, at: passwordArr.count)
        defaults.set(registeredUsers, forKey: "usernames")
        defaults.set(passwordArr, forKey: "passwords")
        dismiss(animated: true, completion: nil)
    }

2 个答案:

答案 0 :(得分:0)

您正在展示,但同时又被解雇,这导致了问题。

删除此行

dismiss(animated: true, completion: nil)

希望有帮助

答案 1 :(得分:0)

您犯了多个错误。

  • 假设您的文本字段为空,警报将显示,并且将执行其他代码行(不应这样做)。 因此,应该使用 return语句,以便当用户遇到错误时,永远不会执行不需要的代码。

  • ,在最后一行中,您关闭了警报,该警报应该不存在。因此,您必须删除该行代码