引用在AppDelegate中从StoryBoard创建的TabbarController?

时间:2015-03-13 01:50:17

标签: ios swift uitabbarcontroller appdelegate

我有一个带有初始登录屏幕的tabbar应用程序。 tabbarController被设置为Storyboard中的初始视图,其中包含一个也嵌入了navigationController的VC。

我有一个loginVC实例化,并在我的AppDelegate中设置为rootViewController。用户从loginVC成功登录后,我需要切换到tabbarController。我是否会尝试获取tabbarcontroller的引用并将其设置为新的rootviewcontroller?如果是这样,我很难搞清楚如何做到这一点:/

的AppDelegate

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    if NSUserDefaults.standardUserDefaults().objectForKey("OAuth") == nil {

        self.window = UIWindow(frame:UIScreen.mainScreen().bounds)

        var storyboard = UIStoryboard(name: "Main", bundle: nil)

        var loginVC = storyboard.instantiateViewControllerWithIdentifier("LOGIN_VC") as LoginVC


        self.window?.rootViewController = loginVC
        self.window?.makeKeyAndVisible()
    } 

    return true
}

用户成功登录

后会调用此方法
  func dismissLoginVC() {
    var tabbarController = self.storyboard?.instantiateViewControllerWithIdentifier("TABBAR") as UITabBarController

    self.presentViewController(tabbarController, animated: true, completion: nil)

    let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    appDelegate.window?.rootViewController =  tabbarController

}

我知道这个问题是它刚刚创建了一个新的tabbarcontroller,而不是引用在storyboard中设置为initialView的现有tabbarController。这似乎有效,但它缺少导航栏中的其他项目。

感谢您指出我正确的方向!

1 个答案:

答案 0 :(得分:1)

我认为您应该更改自己的应用结构。将标签栏控制器保持为故事板中的初始视图控制器,并在第一个选项卡中从控制器的viewDidAppear方法以模态方式(没有动画)呈现登录控制器 - 这将是用户看到的第一件事。当您关闭它时,您将在第一个选项卡中返回该控制器。使用这种方法,您不需要应用代理中的任何代码。