结合 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 和导航控制器问题的主要内容,如果未能解决你的问题,请参考以下文章
Swift:通过 TabBar 和导航控制器以编程方式从一个视图转换到另一个视图
推入导航堆栈时隐藏 TabBar 并在弹出导航堆栈时将其返回