为 UITabBarController 子视图控制器设置相同的导航栏?

Posted

技术标签:

【中文标题】为 UITabBarController 子视图控制器设置相同的导航栏?【英文标题】:Set same navigation bar for UITabBarController child view controllers? 【发布时间】:2018-02-27 14:29:13 【问题描述】:

我有一个看起来像这样的故事板:

Structure:
                        UINavigationController -> UIViewController
    UITabBarController |
                        UINavigationController -> UIViewController

我想为UITabBarController 的两个子视图控制器应用相同的导航栏。

我在互联网上的多个页面上读到,Apple 严格建议不要将 UITabBarController 直接嵌入到 UINavigationController 中。

但是,我不知道如何为所有底层控制器获取相同的状态栏(我希望所有按钮在所有控制器上都相同)。

正如 cmets 中所说,我希望两个 UINavigationControllers 看起来相同,我希望它们通过相同的控制器导航,并且我希望在每个 UINavigationController 中添加功能相同的自定义按钮。

【问题讨论】:

你说的“同一个导航栏”是什么意思?你想让它看起来一样吗?或者您是否希望导航栏通过相同的控制器导航?您是否尝试向导航栏添加自定义按钮,并且希望在不同的导航控制器中使用相同的按钮? @DonMag “相同的导航栏” 是指共享与相同功能和操作相关的自定义栏按钮项的导航栏。 UITabBarController 的两个子项在导航栏中应该具有相同的按钮和相同的操作。我也想浏览相同的控制器。所以我会用“yes”回答你最后三个问题。只是为了说清楚。 好吧——这可能有点混乱……如果每个 Tab 加载相同的 NavigationController,具有相同的 ViewController,那么 Tabs 之间有什么区别?用户会清楚吗? 它们都包含一个加载不同内容的表格视图。第一个加载一些联系人,而另一个(第二个)加载聊天(消息)。用户应该很清楚,因为选项卡栏突出显示了选定的选项,并且表格视图具有其他内容。基本上,有一个UITabBarController 有两个UITableViewController 作为子级(或修改后的UIViewControllers 包括一个UITableView)。使用导航栏(自定义按钮),用户可以访问另一个视图控制器。 嗯...所以,用户在 Tab-1(联系人)...选择一个联系人,“联系人详细信息”VC 被推送到 NavController...用户选择 Tab -2 ... NavController 会发生什么?它“弹回”但加载不同的内容?所以点击选项卡看起来与点击“返回”相同,但它并没有真正返回?也许您真正想要的是显示底部工具栏的 NavController,并向工具栏添加按钮以更改 NavController 堆栈的当前“模式”? 【参考方案1】:

Here is a good example of what you wat

基本上你可以使用

UINavigationBar.appearance()

在整个应用程序中为您的导航栏(或其他元素)提供相同的 UI。

【讨论】:

@AndrejDurnea 我将如何实现自定义栏按钮项和操作? 如果您需要应用程序的UI自定义相同,您可以使用外观来完成。您根据需要在每个控制器中添加的功能。

以上是关于为 UITabBarController 子视图控制器设置相同的导航栏?的主要内容,如果未能解决你的问题,请参考以下文章

在 UITabBarController 中的两个子视图控制器之间转换

如何从自己的子视图控制器中关闭模态 uitabbarcontroller

交互PopGesture时如何处理UITabBarController的子视图(如Flipboard)

UITabBarController 的子视图控制器中的导航栏按钮无响应

将 managedObjectContext 传递给 UITabBarController 问题

如何从它的项目 ViewControllers 访问 UITabBarController 的变量