objective-c - 带有 NavigationController 和 TabController 的 Storyboard

标签 objective-c xcode uinavigationcontroller uitabbarcontroller storyboard

看起来这个应该很容易搞定,但是我今天下午就没有运气了。我将我的问题的这个快速、简化的 Storyboard模型放在一起。

基本上,我希望下面的 TableView Controller 也位于选项卡栏 Controller 中(除了已经存在的导航 Controller 之外)。选项卡将在两个 TableView Controller 之间切换。

现在,带有按钮的 View Controller 充当一种菜单。每个按钮都指向一个 TableView Controller 。理想情况下,此 View Controller 不会使选项卡栏可见,并且只能通过 TableView Controller 导航栏上的后退按钮访问。

我已经尝试了几种不同的方式来嵌入到 tabbarcontroller 中,但没有一种能产生预期的结果:

-我已经尝试选择两个 TableView Controller 并将它们嵌入到选项卡 View Controller 中。标签栏不显示在模拟器中,并出现“无法访问的场景”警告。

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

我会很好地在 Storyboard之上实现一些编程选项,我只是为这个项目选择了 Storyboard,因为它是一种相对简单的数据表示。

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

Storyboard Screenshot

最佳答案

标签栏 Controller 需要是 View 层次结构的 Root View Controller 。将标签栏 Controller 放入任何其他类型的容器 Controller 内违反了 HIG 和 Apple 的标准。

来自 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 设置为窗口的 Root View ,然后将每个 UITableViewController 都放在 UINavigationController 中,它位于 UITabBarController 内。通过这种方式,您仍然可以获得导航栏,并保持在 Apple 的设计指南中(您也不会收到那些讨厌的警告,如果您尝试安装 UITabBarController,Apple 现在甚至可能会抛出异常> 与窗口的 Root View 不同)。

关于objective-c - 带有 NavigationController 和 TabController 的 Storyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14246454/

相关文章:

objective-c - cocoa : using observer in a model

ios - 如何在 Xcode 9 中与 iOS 11、Apple TV 4K 等进行无线调试?

iphone - 在导航 Controller 中的所有 View 后面保持 View 持久的最佳方法

ios - 以编程方式创建不是 rootViewController 的 UINavigationController

iphone - 在 iPhone 应用程序中弹出 View 后发出 SIGABRT 信号

ios - UICollectionViewController 与流布局崩溃

objective-c - 分组 UITableView 部分的背景

objective-c - Windows 和 objective-c

c - Dev-C++ 和 xcode 编译器的不同输出

ios - 在 Xcode 上导出 xliff 文件表现奇怪