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

Posted

技术标签:

【中文标题】在 AppDelegate 中引用从 StoryBoard 创建的 TabbarController?【英文标题】:Referencing TabbarController created from StoryBoard in AppDelegate? 【发布时间】:2015-03-13 01:50:17 【问题描述】:

我有一个带有初始登录屏幕的标签栏应用程序。 tabbarController 设置为 Storyboard 中的初始视图,其中包含 1 个还嵌入了 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,而不是引用在故事板中设置为 initialView 的现有 tabbarController。这似乎可行,但它缺少导航栏中的其他项目。

感谢您为我指明正确的方向!

【问题讨论】:

【参考方案1】:

我认为你应该改变你的应用结构。将选项卡栏控制器保留为情节提要中的初始视图控制器,并在第一个选项卡中通过控制器的 viewDidAppear 方法以模态方式(没有动画)呈现登录控制器——这将是用户看到的第一件事。当您关闭它时,您将返回到第一个选项卡中的该控制器。使用这种方法,您不需要应用程序委托中的任何代码。

【讨论】:

是的!这可行,但是,在显示 loginVC 之前仍然可以看到 tabVC 的毫秒数:/...不过,如果没有其他解决方案,这将是目前的解决方案 @TuanAnhVu,我有时会看到这个,而不是其他人。你在设备上测试过吗?我认为我没有在设备上看到过这个故障,但我已经有一段时间没有尝试过了。 我有。 iPhone 6,您几乎看不到它...但我想知道您是否会使用较慢/较旧的手机...哈哈。你肯定会在模拟器上看到它。但话又说回来,用户会看到这个屏幕恰好一次。嗯..

以上是关于在 AppDelegate 中引用从 StoryBoard 创建的 TabbarController?的主要内容,如果未能解决你的问题,请参考以下文章

从 iOS 框架引用 UIApplication 或 AppDelegate 窗口属性会导致应用被 App Store 拒绝吗?

引用 AppDelegate 实例变量

如何将 AppDelegate 中对象的引用传递给 ViewController

iOS - 从 AppDelegate 监控应用程序流

引用 AppDelegate 时出错

“没有更多上下文的表达式类型不明确” - 引用 appDelegate