【问题标题】:How to reload the root view controller after logging out?注销后如何重新加载根视图控制器?
【发布时间】:2016-08-10 19:20:30
【问题描述】:

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

【问题讨论】:

    标签: ios swift xcode7 uisplitviewcontroller


    【解决方案1】:

    我通常有一个 rootViewController,它永远作为一个根。 它的目的是保存和呈现登录和主控制器。 这样你总是有一个 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()
            }
    

    【讨论】:

    • self.mainController 是 UINavigationController 类型吗?如var mainController: UINavigationController?
    • 另外,在 rootViewController 类中有一个单例实例不是可取的吗?
    • 第一个问题:我更喜欢 UIViewController,我看不到 UINavigationController 的好处,因为它必须有一个根视图控制器。但这是基于我的需要的个人决定。第二个问题:根控制器是一个单一的实例,但不是单一的音调,如果这就是你的意思。是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2015-09-21
    • 1970-01-01
    • 2015-12-28
    • 2011-09-22
    相关资源
    最近更新 更多