成功登录后无法关闭 UIViewController

Posted

技术标签:

【中文标题】成功登录后无法关闭 UIViewController【英文标题】:Can't dismiss UIViewController after Successful Login 【发布时间】:2019-01-09 09:05:19 【问题描述】:

登录完成后,我正在努力从 NavigationStack 中关闭 UIViewController。

登录屏幕是一个 UIViewController 用这行代码呈现的

        let loginController = LoginController()
        self.present(loginController, animated: true, completion: nil)

然后我运行此代码以通过 firebase 登录用户。

        Auth.auth().signIn(withEmail: email, password: password)  (user, err) in
        if let err = err 
            print("Failed to sign in user with email", err )
        

        //self.dismiss(animated: true, completion: nil)

        let userProfileVC = UserProfileController()
        let navController = UINavigationController(rootViewController: userProfileVC)

        self.navigationController?.pushViewController(navController, animated: true)

    

如你所见,我尝试了 pushViewController 方法,也尝试了注释的 self.dismiss 方法?我所做的一切似乎都没有删除 loginController UIView 并将我带回 UINavigationController 主屏幕。谁能帮帮我,非常感谢。

【问题讨论】:

【参考方案1】:

你可以这样做

self.dismiss(animated: true, completion: 
let userProfileVC = UserProfileController()
        let navController = UINavigationController(rootViewController: userProfileVC)

        self.navigationController?.pushViewController(navController, animated: true)
)

【讨论】:

【参考方案2】:

您可能需要打印您的视图堆栈并将其展示给我们以便更好地理解,但请尝试以下方法之一:

navigationController?.popViewController(animated: true)

navigationController?.popToRootViewController(animated: true)

第一种方法将处理最近推送的视图控制器,而第二种方法将删除除导航控制器“主屏幕”之外的所有您寻找的。​​p>

【讨论】:

【参考方案3】:

当当前控制器上存在任何控制器时,您不能推送到特定控制器。因此您可以在当前控制器上使用协议委托。当调用委托方法时,您可以推送到您的控制器。

【讨论】:

以上是关于成功登录后无法关闭 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

winform程序登陆后关闭登录窗体

成功登录后关闭 LoginVC

成功登录后 SwiftUI Firebase 身份验证关闭视图

Spring Security仅在成功登录后显示主页[关闭]

成功登录JavaFX后如何切换主屏幕[关闭]

成功登录后关闭 Kendo UI 窗口并重新加载父页面