Swift 3 回到之前的视图控制器

Posted

技术标签:

【中文标题】Swift 3 回到之前的视图控制器【英文标题】:Swift 3 Goes back to previous view controller 【发布时间】:2017-12-16 01:07:07 【问题描述】:

我正在创建的应用程序中有一个登录功能,它看起来运行良好。我使用解析。这是登录功能。

 @IBAction func login(_ sender: AnyObject) 

    if self.userName.text == "" || self.password.text == "" 
        self.createAlert(title: "Login Error", message: "Please make sure all fields are filled in")
    else
        PFUser.logInWithUsername(inBackground: userName.text!, password: password.text!)  (user, error) in

        self.activityIndicator.stopAnimating()
        UIApplication.shared.endIgnoringInteractionEvents()



        if error != nil 
            var displayErrorMessage = "Please try again later."

            if let errorMessage = (error! as NSError).userInfo["error"] as? String 

                displayErrorMessage = errorMessage
            

            self.createAlert(title: "Signup Error", message: displayErrorMessage)
        else
            print("logged in")

            self.performSegue(withIdentifier: "successLogin", sender: self)

        

        

    


所以第一次检查检查用户名或密码文本字段是否为空,如果是,它会创建一个警报。当我第一次启动应用程序时,它就像一个魅力。但是,当我使用用户登录并注销时,我会被重定向到用户名和密码为空的登录屏幕。然后我单击登录并获得正确的警报,说“请确保所有字段都已填写”,当我关闭它时,它会自动执行 segue,就好像登录成功一样。谁能帮帮我?

@IBAction func logOut(_ sender: AnyObject) 

    PFUser.logOut()
    performSegue(withIdentifier: "logOutSeg", sender: self)


另外,这是我的创建警报功能:

func createAlert(title: String, message: String) 

    let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)

    alert.addAction(UIAlertAction(title: "Ok", style: .default, handler:  (action) in
        self.dismiss(animated: true, completion: nil)
    ))

    self.present(alert, animated: true, completion: nil)


如果我在第一个 if 语句之后删除 createAlert 方法,它会正确执行操作,所以我假设它在其中。

【问题讨论】:

我想知道您是否正在对登录屏幕进行后续操作,然后在 ok 操作中执行 self.dismiss。难道解雇正在撤消转场? @ryantxr 我在他们注销时对登录屏幕进行了转场,但我没有看到我调用 self.dismiss 操作的任何地方 参见:alert.addAction 【参考方案1】:

当您第一次退出第二个屏幕时,如果通过执行 segue 进入第一个登录屏幕,则可能会发生这种情况。这就是为什么你得到空的用户名和密码。当您通过调用 self.dismiss(animated: true, completion: nil) 在登录屏幕中关闭 alertviewcontroller 时,它会关闭当前视图控制器。退出登录屏幕(第二个屏幕)而不是在注销后执行 segue。

【讨论】:

好的,谢谢,我基本上摆脱了 self.dismiss 并且它有效!

以上是关于Swift 3 回到之前的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

从 Swift 3 中的另一个项目访问视图控制器

Swift 3 - 将数据传递回以前的视图控制器

Swift:重新加载视图控制器

在转到下一个视图控制器(Swift)之前进行异步调用

Swift 4仅为一个视图控制器设置导航属性

Swift 将计算的数据传回之前的视图控制器