从拆分视图控制器的详细视图中调用主视图控制器

Posted

技术标签:

【中文标题】从拆分视图控制器的详细视图中调用主视图控制器【英文标题】:Call master view controller from within detail view of split view controller 【发布时间】:2016-01-27 19:18:52 【问题描述】:

我有一个带有 3 个选项卡的选项卡栏控制器,每个选项卡都嵌入在自己的导航控制器中。这很好用,但现在我试图将整个标签栏控制器放在一个拆分视图控制器中。

问题是拆分视图控制器的主视图上的导航隐藏了选项卡栏控制器内视图的现有导航。如果我隐藏主视图导航,我会返回标签栏控制器导航,但我无法返回主列表。我可以以编程方式重新添加按钮,但它仅适用于 iPad。

navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem() 
navigationItem.leftItemsSupplementBackButton = true

我也尝试过使用preferredDisplayMode 的各种选项,但同样,这只适用于 iPad。它对 iPhone 没有影响。我可以以编程方式将自定义按钮添加到选项卡视图控制器中的视图控制器并从那里调用一个动作,但我不知道要调用什么动作。我尝试在displayModeButtonItem: 上调用该操作

splitViewController?.displayModeButtonItem().action

那也没用。我希望能够以编程方式重新添加拆分视图控制器在 iPhone 上添加的后退按钮的行为。

【问题讨论】:

【参考方案1】:

我最终放弃了拆分视图控制器,只使用了另一个选项卡。但是我在另一个应用程序中遇到了类似的问题,我想出了一种 hacky 解决方案。我将标签栏控制器本身嵌入到导航控制器中。这会导致出现多个导航控制器,因此我检查了 viewWillAppear 以隐藏导致问题的导航控制器。

if let hidden = tabBarController?.navigationController?.navigationBarHidden 
    if hidden == true 
        tabBarController?.navigationController?.navigationBarHidden = false
    

这个应用程序有一个拆分视图控制器作为根视图控制器,然后在主视图和详细视图中都有标签栏控制器。每个视图都嵌入在导航控制器中,我只是根据是否有重复显示或隐藏导航栏。

【讨论】:

以上是关于从拆分视图控制器的详细视图中调用主视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 拆分视图控制器 - 如何从主视图控制器内部获取指向详细视图控制器的指针(引用)?

在拆分视图控制器的详细视图中制作导航控制器

在 iOS 拆分视图控制器上推送新的视图控制器

将多个详细视图与拆分视图控制器一起使用

拆分视图控制器:如何将主视图控制器连接到详细视图控制器?

iPhone 6 Plus 上的拆分视图控制器旋转