【问题标题】:Storyboard with NavigationController and TabController带有 NavigationController 和 TabController 的情节提要
【发布时间】:2012-12-24 03:55:23
【问题描述】:

看起来这应该很容易弄清楚,但我今天下午没有运气。我将我的问题的这个快速、简化的故事板模型拼凑在一起。

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

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

我尝试了几种不同的嵌入到 tabbarcontrollers 的方法,但都没有产生预期的结果:

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

-我已经尝试将初始导航控制器嵌入到 tabbarcontroller 中。这将为第一个“菜单”页面创建一个选项卡条目。一旦我将表格视图连接到选项卡视图,它也会导致推送问题。

我会很好地在故事板之上实现一些程序化选项,我只是为这个项目选择了故事板,因为它是一种相对简单的数据呈现方式。

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

【问题讨论】:

  • 那么,您需要帮助将标签栏控制器添加到情节提要中,还是在推动表格视图控制器时隐藏标签栏?

标签: objective-c xcode uinavigationcontroller uitabbarcontroller storyboard


【解决方案1】:

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

来自 Apple 文档:

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

因此,最重要的是您需要重新考虑您的设计。一种选择是将UITabBarController 设置为窗口的根视图,然后将每个UITableViewControllers 放在UINavigationController 中,该UINavigationController 放在UITabBarController 中。通过这种方式,您仍然可以获得导航栏,并保持在 Apple 的设计准则范围内(您也不会收到那些讨厌的警告,如果您尝试安装 UITabBarController 以外的任何东西,Apple 现在甚至可能会抛出异常窗口的根视图)。

【讨论】:

  • 所以基本上按照现在的设置(使用“菜单”屏幕)不可能做到吗?我确实尝试将每个表格视图放在它自己的导航控制器中,但这显然会导致按钮的转场出现问题(标签栏没有出现,因为它不是启动转场的选项卡项)。该应用程序在没有任何标签栏控制器的情况下也能完美运行,但它是在一次设计审查中提出的,即添加一个标签栏控制器将需要更少的触摸来从一个选项移动到另一个选项。
  • 如果将标签栏设置为窗口的根视图控制器,并将包含 tableviewcontrollers 的导航控制器添加到标签栏控制器,您将同时看到标签栏和导航控制器。
  • 我最终这样做了,并删除了带有各种按钮的“菜单”控制器。我会将此标记为答案,因为您让我朝着正确的方向前进。谢谢!
  • @jmstone 和你解释的一样,但是我的标签栏不可见,你能告诉我是否需要任何其他的东西。
【解决方案2】:

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

请参考Storyboard navigation controller and tab bar controller

还有 Matthjin 的好榜样:http://cl.ly/VQLa

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

【讨论】:

    猜你喜欢
    • 2014-03-10
    • 2015-01-20
    • 1970-01-01
    • 2012-03-27
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    相关资源
    最近更新 更多