带有导航控制器和标签控制器的故事板

3
看起来这应该很容易解决,但是今天下午我没什么好运气。我制作了一个快速简化的故事板模型来展示我的问题。
基本上,我希望下方的表视图控制器也能在选项卡控制器中(除了已经存在的导航控制器)。选项卡可以在两个表视图控制器之间切换。
现在,带有按钮的视图控制器充当菜单。每个按键都会导向其中一个表视图控制器。理想情况下,这个视图控制器不应该显示选项卡,只能从表视图控制器的导航栏后退按钮到达。
我尝试了几种不同的嵌入选项卡控制器的方法,但没有一种能产生期望的结果:
- 我试着选择两个表视图控制器并将它们嵌入到一个选项卡视图控制器中。选项卡没有出现在模拟器中,并出现了“不可访问的场景”警告。 - 我试着将初始导航控制器嵌入到选项卡控制器中。这会为第一个“菜单”页面创建一个选项卡条目。连接表视图到选项卡视图后,这还会导致推送segue问题。
我可以通过编程实现一些可选项,但是由于这个项目的数据呈现比较简单,所以我选择了storyboarding。
正确的做法是什么?谢谢!

那么,您需要帮助将选项卡控制器添加到故事板中,还是只需在推送表视图控制器时隐藏选项卡栏? - Andrew Tetlaw
2个回答

9
一个标签栏控制器需要成为您视图层次结构的根视图控制器。在任何其他类型的容器控制器中放置标签栏控制器违反了人机界面指南和苹果的标准。
来自Apple文档的描述如下:
“When deploying a tab bar interface, you must install this view as the root of your window. Unlike other view controllers, a tab bar interface should never be installed as a child of another view controller.”
因此,要点在于您需要重新考虑设计。其中一种选择是将UITabBarController设置为窗口的根视图,然后将每个UITableViewController放置在UINavigationController中,并将其放置在UITabBarController中。这样,您仍然可以获得导航栏,并遵循苹果的设计准则(您也不会收到那些烦人的警告,而且如果您尝试将UITabBarController安装为窗口的根视图之外的任何其他位置,现在甚至可能会抛出异常)。

所以基本上现在的设置(带有“菜单”屏幕)是不可能实现的吗?我尝试将每个表视图放在自己的导航控制器中,但这显然会导致按钮的segue出现问题(选项卡栏不会出现,因为它不是触发segue的选项卡项)。应用程序在没有任何选项卡控制器的情况下完美运行,但在设计审查中提出了一个问题,即添加一个选项卡控制器可以减少从一个选项到另一个选项的触摸次数。 - mElling
如果您将选项卡栏设置为窗口的根视图控制器,并将包含表视图控制器的导航控制器添加到选项卡控制器中,您将同时看到选项卡栏和导航控制器。 - jmstone617
我最终这样做了,并且放弃了带有各种按钮的“菜单”控制器。我会将此标记为答案,因为你让我朝着正确的方向前进。谢谢! - mElling
@jmstone按照你解释的方式做了同样的事情,但我的选项卡栏没有显示出来,你能告诉我是否还需要其他什么吗? - Mojo Jojo

0

我接受JMStone的答案,但我们可能会遇到需要将选项卡控制器放置在其他控制器内部的情况,特别是表视图控制器。

请参考Storyboard导航控制器和选项卡控制器

还有Matthjin的好例子:http://cl.ly/VQLa

希望能帮助那些想要将选项卡控制器放置在表视图控制器内并且需要适当导航的人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接