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

时间:2016-08-10 19:20:30

标签: ios swift xcode7 uisplitviewcontroller

根据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。我正在以编程方式执行所有操作。)

1 个答案:

答案 0 :(得分:0)

我通常有一个rootViewController,永远保留为root。 它的目的是保存并呈现login和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()
        }