Swift - UITabBarContorller初始视图 - 何时强制启动登录屏幕?

时间:2018-04-27 16:36:50

标签: swift firebase login firebase-authentication uitabbarcontroller

我已经以编程方式设置了一个带有三个选项卡的自定义UITabBarControler,每个选项卡都是嵌入UINavigationController的UIViewController。

我没有使用故事板。我将自定义选项卡控制器设置为AppDelegate中的根

let ordersVC = OrdersViewController()  // where Orders is a UIViewController
ordersVC.title = "Orders"
ordersVC.view.backgroundColor = UIColor.white
let ordersVCNavi = UINavigationController(rootViewController: ordersVC)
ordersVCNavi.navigationBar.tintColor = UIColor.black
...
viewControllers = [homeVCNavi, inventoryVCNavi, ordersVCNavi]

应用程序运行正常,我得到三个标签,可以在它们之间移动。

填充标签的示例(在客户标签栏控制器的viewDidLoad中)

let vc = LoginViewController()
self.navigationController?.pushViewController(vc, animated: false)

现在我需要先查看用户是否已登录(使用Firebase)。我可以轻松检查已登录(Firebase缓存)或未登录。

我这样做是登录AppDelegate检查

我的问题是当我需要强制登录时(跳转到登录视图控制器)。我找不到一个有用的地方 - 尝试将调用放在自定义UITabBarController didLoad中,并忽略代码 - 尝试将调用放在didLoad中,初始标签控制器中的willAppear也被忽略

我可以在初始标签上放置一个按钮,该按钮确实会启动登录控制器。所以我可以通过按下按钮进入登录控制器。

按下按钮后我可以执行此代码,登录控制器将显示

viewDidLoad()

但是,如果我知道我需要强制登录,并尝试在初始标签控制器中的viewWillAppear()或{{1}}或自定义UITabBarController中执行相同的代码剪切,则忽略推送。没有任何事情发生。

当初始视图是tabbarcontroller时,强制登录屏幕的最佳做法是什么?

如果没有登录,应该将导航设置到登录控制器以强制登录。想要登录以便用户在未登录时无法使用该应用程序。

1 个答案:

答案 0 :(得分:1)

didFinishLaunchingWithOptions

中的

 if loggedIn {
      window?.rootViewController = CustomTabBarController()
 }
 else {
      window?.rootViewController =  LoginViewController()
 }

登录成功后

UIApplication.shared.keyWindow?.rootViewController  = CustomTabBarController()