注销后如何重新加载根视图控制器?

How to reload the root view controller after logging out?

根据 Apple 的说法,拆分视图在应用程序的整个生命周期中应始终是根视图控制器。

每当我注销帐户时,我能够重新加载详细视图控制器数据的唯一方法是在用户注销时将登录控制器设置为根视图控制器,然后创建 spit 视图根视图控制器再次。

这只是一个例子:

// if the user is not logged in
if FIRAuth.auth()?.currentUser?.uid == nil {
        window?.rootViewController = UINavigationController(rootViewController: LoginController())
    } else {
        // If the user is logged in, show the main controller
        window?.rootViewController = UINavigationController(rootViewController: MainController(collectionViewLayout: UICollectionViewFlowLayout()))
    }

不执行我上面所做的:如果我要注销,登录视图将以模态方式显示。如果我要登录到另一个帐户,然后以模式方式关闭登录控制器,拆分视图看起来仍然与上一个帐户相同。那么有没有一种方法或技术可以让我在登录控制器中显示动画,在重新登录时,拆分视图会更新?我想确保我遵守了指南。

(注意:拆分视图中详细视图控制器的根是 UICollectionViewController。我以编程方式完成所有这些操作。)

我通常有一个 rootViewController,它永远作为根。 它的目的是保存和呈现登录和 mainController。 通过这种方式,您始终拥有一个 rootViewController,它提供了在呈现的控制器之间切换的动态。

我个人更喜欢在呈现之前重新分配登录控制器和主控制器,以确保上次登录用户没有留下任何数据。

Example:

class rooViewController: UIViewController {

    func presentedLogin() {
        self.loginController = LoginController()
        self.mainController.dismissViewControllerAnimated(true) { 
            self.presentViewController(self.loginController, animated: true, completion: nil)
        }
    }

    func presentMainApplication() {
        self.mainController = MainController()
        self.loginController.dismissViewControllerAnimated(true) {
            self.presentViewController(self.mainController, animated: true, completion: nil)
        }
    }
}


//App Delegate or any ether place of this application logic:

  if FIRAuth.auth()?.currentUser?.uid == nil {
            rootViewController.presentedLogin()
        } else {
            // If the user is logged in, show the main controller
            rootViewController.presentMainApplication()
        }