【问题标题】:Back Navigation from Embedded UISplitViewController Using Single Navigation Bar使用单个导航栏从嵌入式 UISplitViewController 返回导航
【发布时间】:2018-01-16 23:56:50
【问题描述】:

我想在我的 iOS 应用程序的几个地方有拆分视图,它们都不是根视图控制器。我了解拆分视图最初设计为位于应用程序的根目录并提供根导航控制器,并且 Apple 的指南最初不允许任何变通方法。更新指南状态

您不能将拆分视图控制器推送到导航堆栈上。虽然可以在其他一些容器视图控制器中安装拆分视图控制器作为子视图,但在大多数情况下不建议这样做。

现在拆分视图模式对我的应用确实有好处,我不想在这里重新发明轮子,所以我尝试使用容器视图,主要使用以下步骤:

  1. 使用常规 UIViewController 创建场景。
  2. 添加覆盖整个屏幕的UIContainerView
  3. 向情节提要添加UISplitViewController,这将创建一个拆分视图控制器、一个导航控制器、一个表视图控制器(用于主视图)和一个常规视图控制器(用于详细视图)。
  4. 创建从容器视图到拆分视图控制器的嵌入转场。

这有一些怪癖,我希望最终解决这些问题(例如,最初显示详细视图,在 iPad 上从左侧滑动表格视图显然也试图在主导航上返回导航),但它基本上可以工作.到目前为止,一切顺利。

现在,问题是我有两个导航控制器:我的应用程序根目录中的主导航控制器和嵌入拆分视图中的导航控制器。这给了我两个独立导航的导航栏,让我可以:

  • 使用嵌入式导航控制器导航回拆分视图的根目录
  • 从封闭导航控制器中的容器视图导航回来

除了两个导航栏不吸引人之外,我不希望 iPhone 用户直接从详细视图中执行第二个导航栏。所以我接下来的步骤是:

  1. 在外部视图控制器中隐藏导航栏
  2. 在内部导航栏添加后退导航按钮,接管主导航栏后退按钮的作用

剩下要做的是实现弹出主导航堆栈的容器视图控制器的后退按钮。问题是:如何从具有自己的导航控制器(使用 Swift)的嵌入式视图访问主导航控制器?

【问题讨论】:

    标签: ios swift3 uinavigationcontroller uisplitviewcontroller uicontainerview


    【解决方案1】:

    访问父级(包含视图控制器)导航控制器的导航堆栈非常简单:

    @IBAction func backButtonTapped(_ sender: UIBarButtonItem) {
        parent?.navigationController?.popViewController(animated: true)
    }
    

    【讨论】:

      【解决方案2】:

      在开发我的应用程序时,我不得不面对类似的问题。 我的问题是,我必须在侧边栏上显示导航控制器和 splitviewcontroller。另一个问题是导航控制器从拆分视图到导航控制器。以下是我遵循的步骤

      1) 在创建拆分视图控制器时,我隐藏了 master 和 detail 的导航控制器并将其设置为根视图,请同时保留您的顶级导航控制器的引用。

      2) 我增加了 splitview.root.window 和 view 的 'y' 以适应自定义视图。

      3) 我创建了一个带有后退按钮的自定义视图,然后使用动画处理了过渡。

      如果您需要代码 sn-ps,请告诉我。我现在会分享它。但我必须搜索它。

      【讨论】:

      • 感谢您的回答。我不确定我是否理解,例如我很难在侧边栏(菜单?)中描绘拆分视图。因此,在您解决挖掘该代码的麻烦之前,让我们确保它适用。您的拆分视图的导航控制器是否嵌入在容器视图中?您是否尝试从嵌入式导航控制器中访问外部导航控制器?如果是的话,确实很高兴看到代码。
      • 我所做的是,我正在用过渡切换我的根视图控制器。在这样做的同时,我保持对我的外部导航控制器的引用
      • 是的,我一直在想一些事情。但至少在我的情况下,似乎有一个更简单的解决方案。感谢您的 cmets (+1)!
      • 感谢(+1)。我的问题非常大。我不得不处理一个侧面菜单。所以为了做到这一点,我不得不从头开始创建一个侧边栏菜单(汉堡菜单)。任何方式谢谢
      猜你喜欢
      • 2020-08-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多