【发布时间】:2018-01-16 23:56:50
【问题描述】:
我想在我的 iOS 应用程序的几个地方有拆分视图,它们都不是根视图控制器。我了解拆分视图最初设计为位于应用程序的根目录并提供根导航控制器,并且 Apple 的指南最初不允许任何变通方法。更新指南状态
您不能将拆分视图控制器推送到导航堆栈上。虽然可以在其他一些容器视图控制器中安装拆分视图控制器作为子视图,但在大多数情况下不建议这样做。
现在拆分视图模式对我的应用确实有好处,我不想在这里重新发明轮子,所以我尝试使用容器视图,主要使用以下步骤:
- 使用常规
UIViewController创建场景。 - 添加覆盖整个屏幕的
UIContainerView。 - 向情节提要添加
UISplitViewController,这将创建一个拆分视图控制器、一个导航控制器、一个表视图控制器(用于主视图)和一个常规视图控制器(用于详细视图)。 - 创建从容器视图到拆分视图控制器的嵌入转场。
这有一些怪癖,我希望最终解决这些问题(例如,最初显示详细视图,在 iPad 上从左侧滑动表格视图显然也试图在主导航上返回导航),但它基本上可以工作.到目前为止,一切顺利。
现在,问题是我有两个导航控制器:我的应用程序根目录中的主导航控制器和嵌入拆分视图中的导航控制器。这给了我两个独立导航的导航栏,让我可以:
- 使用嵌入式导航控制器导航回拆分视图的根目录
- 从封闭导航控制器中的容器视图导航回来
除了两个导航栏不吸引人之外,我不希望 iPhone 用户直接从详细视图中执行第二个导航栏。所以我接下来的步骤是:
- 在外部视图控制器中隐藏导航栏
- 在内部导航栏添加后退导航按钮,接管主导航栏后退按钮的作用
剩下要做的是实现弹出主导航堆栈的容器视图控制器的后退按钮。问题是:如何从具有自己的导航控制器(使用 Swift)的嵌入式视图访问主导航控制器?
【问题讨论】:
标签: ios swift3 uinavigationcontroller uisplitviewcontroller uicontainerview