带有NavigationController和TabController的故事板

时间:2013-01-09 21:05:02

标签: objective-c xcode uinavigationcontroller uitabbarcontroller storyboard

这似乎很容易理解,但今天下午我没有运气。我把这个问题的快速,简化的故事板模型汇总在一起。

基本上,我希望下面的表格视图控制器也在标签栏控制器中(除了已经存在的导航控制器)。选项卡将在两个表视图控制器之间切换。

现在,带按钮的视图控制器充当一种菜单。每个按钮通向一个表视图控制器。理想情况下,此视图控制器标签栏可见,并且只能从表视图控制器导航栏上的后退按钮访问。

我尝试了一些嵌入tabbarcontrollers的不同方法,但没有一种方法可以产生预期的结果:

- 我尝试选择两个表视图控制器并将它们嵌入到选项卡视图控制器中。标签栏中没有显示标签栏,并显示“无法访问的场景”警告。

- 我尝试将初始导航控制器嵌入到tabbarcontroller中。这将为第一个“菜单”页面创建一个选项卡条目。一旦我将tableviews连接到tabview,它也会导致push segues出现问题。

我可以在故事板上实现一些程序化选项,我只是为这个项目选择了故事板,因为它是一个相对简单的数据表示。

解决这个问题的正确方法是什么?谢谢!

Storyboard Screenshot

2 个答案:

答案 0 :(得分:9)

标签栏控制器必须是视图层次结构的根视图控制器。将标签栏控制器放在任何其他类型的容器控制器中都违背了HIG和Apple的标准。

来自Apple文档:

  

部署标签栏界面时,必须将此视图安装为   窗口的根。与其他视图控制器不同,是一个标签栏   接口永远不应该作为另一个视图的子项安装   控制器。

所以,这里的底线是你需要重新考虑你的设计。一种选择是将UITabBarController设置为窗口的根视图,然后将UITableViewController内的每个UINavigationController放在UITabBarController内,UITabBarController放在{{1}内}}。通过这种方式,你仍然可以获得导航栏,并保持在Apple的设计指导范围内(你也不会得到那些讨厌的警告,如果你尝试安装{{1}},Apple现在甚至可能会抛出异常除了窗口的根视图。)

答案 1 :(得分:0)

我接受JMStone的回答,但我们可能会遇到需要将标签栏控制器放在其他控制器,特别是表视图控制器中的情况。

请参阅Storyboard navigation controller and tab bar controller

也是Matthjin的好例子:http://cl.ly/VQLa

希望能帮助那些想要将标签栏控制器放在表格视图控制器中并希望正确导航的人。