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

Call master view controller from within detail view of split view controller

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

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

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

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

上的操作
splitViewController?.displayModeButtonItem().action

那也没用。我希望能够以编程方式添加拆分视图控制器在 iPhone.

上添加的后退按钮的行为

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

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

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