iOS8 嵌套导航控制器的行为

iOS8 behavior on nested navigation controllers

我的应用有一个顶级导航控制器。它像往常一样在不同页面之间导航并在顶部显示导航面板。其中一个页面是一个带有 3 个选项卡的选项卡控制器。每个选项卡都有自己的导航控制器,因为在选项卡中时,我需要打开一个新页面,推送到该选项卡内容的顶部(选项卡栏仍然可见)。我的问题:"inner" 导航工作正常,可以推送页面等等,但它不能 "take control" 越过屏幕顶部的导航面板。该面板仍然显示全局页面导航,而我想显示 "inner" 导航,如果内部没有历史记录,则显示全局导航。说 "show navigation" 我的意思只是后退按钮。

基本原理: 该应用程序在顶层有一个拆分视图控制器 - 它成为一个紧凑尺寸的简单导航控制器。它在不同的页面中导航,其中一个页面显示为媒体 player/selector(如 iOS 内置音乐应用程序)。媒体选择器是一个选项卡控制器,有 3 个用于过滤媒体的选项卡,假设它就像音乐应用程序一样 - 歌曲、艺术家、专辑。当您切换到艺术家选项卡时,您可以看到 table 位艺术家。单击其中一个将打开该艺术家的歌曲列表,就像在音乐应用程序中一样。新过滤的页面正常推送,但屏幕顶部的导航面板仍然显示全局导航。我想合并这两个导航,因此需要一种方法在需要时接管此面板的控制权。似乎它忽略了嵌套导航的后台逻辑,或者我没有找到一个好的方法来做到这一点。假设您应该将 iOS 音乐应用程序放在拆分视图(或导航)控制器中,它只是全局屏幕之一,但在过滤曲目时仍然需要一个很好的导航逻辑。

这里有多种方法可以实现您想要的。

您可以编写一些额外的代码来确定后退按钮在全局导航器中的作用。这相当于用一个相同但调用您自己的方法的按钮替换内置后退按钮。

然后你就可以用任何合适的方式处理它(你的内部导航器是否显示等)。

第二种方法是在要显示内部导航栏时隐藏外部导航控制器的导航栏,如@Paulw11在评论中所说。无论哪种方式,您都应该能够获得无缝的结果。