结合 TabBar 和导航控制器问题

Posted

技术标签:

【中文标题】结合 TabBar 和导航控制器问题【英文标题】:Combining TabBar and Navigation Controllers Question 【发布时间】:2011-09-14 21:18:59 【问题描述】:

在我的 appDelagate 中,我有一个名为“FrontPage”的 UIViewController,它基本上是一个登录屏幕。一旦登录通过身份验证,它就会从超级视图中删除自己,并在 NC 中创建一个 tabbarcontroller、navigationcontroller(在 tabbar 内)和各种 UIViewController,并在 tab bar 中自行创建。然后我将 TabBarVC.view 推送到 windows subView。

它可以工作,但我希望在将 windows 子视图设置为 TabBarVC.view 后,我可以释放 TabBarViewController 以释放它,并且 appdelagate 将拥有 TabBarVC,但是当我这样做时它会崩溃。

当我输入这个时,我意识到我从来没有通过实际的 TabBarVC,只是视图,但有没有办法做到这一点?

另外,如果我完全搞砸了,请告诉我。

【问题讨论】:

【参考方案1】:

您应该将窗口的rootViewController 属性设置为您的UITabBarController 实例,类似于:

    // set the tab bar controller as our root view controller    
    [self.window setRootViewController:tabBarController];

为了澄清,这将为您将 TabBarController、它的视图及其所有子视图添加到窗口的视图层次结构中,我建议您也将这种方法用于您的登录视图控制器。

【讨论】:

【参考方案2】:

您可以让您的 UITabBarController 成为应用程序委托的IBOutlet(或者只保留您拥有的生成它的代码)。使其成为应用程序委托的保留属性,综合属性,然后在应用程序委托 (self.tabBarController = ...) 中创建 UITabBarController,或者如果您使用 xib,则从 UITabBarController 到 xib 中的应用程序委托建立 IBOutlet 连接.

您可以将 UITabBarController 添加到应用程序的窗口,然后在其顶部添加 FrontPage UIViewController。从窗口中删除 FrontPage 后,UITabBarController 将已经出现在它的下方。

【讨论】:

以上是关于结合 TabBar 和导航控制器问题的主要内容,如果未能解决你的问题,请参考以下文章

TabBar 覆盖导航堆栈中的视图控制器内容

Swift:通过 TabBar 和导航控制器以编程方式从一个视图转换到另一个视图

选项卡不会以编程方式切换导航控制器内的 tabBar

推入导航堆栈时隐藏 TabBar 并在弹出导航堆栈时将其返回

当我在基于选项卡的应用程序中从一个控制器导航到另一个控制器时,tabBar 被隐藏

swift - 指定VC隐藏导航栏 - 禁用tabbar的根控制器手势,防止两个tabbar跳转 手势冲突