隐藏在UITabBarController中的UINavigationController

3
我有一个应用程序,其中包含5个UIViewController,每个都在相应的UINavigationController内部,并全部放置在显示屏底部的5个选项卡中的UITabBarController中。
当按下对话框按钮时,我想显示另一个UIViewController(在UINavigationController内部)。
此视图应仅通过编程方式加载和卸载;即不应出现在选项卡栏中。但是,我希望选项卡栏始终可见。
如果将[UINavigationController view]添加到[self window]中,则会覆盖UITabBar。如果将其添加到任何其他图层,则UINavigationController会添加其对状态栏的补偿,因此看起来比预期的要低。
一种解决方案是将第6个UINavigationController添加到其他选项卡中,并隐藏其tabBarItem。然后,我可以使用tabBarselectedIndex属性来显示它和隐藏它。
通过UIViewController访问tabBarItem没有明显的方法来实现这一点。
@wisequark,我认为您完全误解了,几乎重写了我的应用程序架构。但是,由于它们是互斥的,并且没有“深入”的概念,因此我为每个视图都有一个单独的导航控制器。
@Kendall,这就是我希望我将不得不做的-让模态视图出现并带有一个隐藏按钮以恢复正常界面。但是,保持选项卡栏始终可见会很好,因此我只是想知道是否有人知道一种方法。
3个回答

15
听起来你手头很混乱。一个 UINavigationController 是一个独立的对象,与 UITabBarController 非常不同。通常情况下,你的应用程序应该有一个 tab 控制器,其中一个选项卡加载一个 UINavigationController,然后加载它的视图 - 两者都管理不同视图的显示。这样说 UIViewController 的显示是不合适的,因为这个对象没有可视化的表示。在 UINavigationController 的情况下,导航控制器对象负责显示导航栏和表格视图(在最常见的情况下),并管理导航层次结构中所有视图的显示。它本身在屏幕上没有相应的表示。同样,UITabBarController 显示一个选项卡条,并负责加载和卸载附加到选项卡按钮的视图和/或视图控制器。如果我们将其呈现为图像,则会看起来像这样 - alt text http://img.skitch.com/20081112-2sqp7q4wafa34te1ga337u4k8.png

4

听起来你想要做的是在标签栏仍然可见的情况下呈现一个模态视图。你可以将你的视图添加为标签栏控制器视图的子视图。标签栏的视图实际上不是标签栏本身,而是包含标签栏和选定项目视图的视图。

另外,你可以尝试使用所选标签(即 [tabBarController.selectedViewController presentModalViewController:animated:])作为接收者调用 presentModalViewController:animated:。我似乎曾经这样做过(完全是意外),而且标签栏仍然可见。

还有一个想法:由于你的五个视图控制器都是 UINavigationController,你可以总是将 pushViewController:animated: 推到所选视图控制器上,然后隐藏返回按钮。你的视图将只是无动画地出现。但是你需要记住,在用户切换到另一个选项卡时弹出你的视图控制器。这可能需要更多的工作。


2
我能想到的最好的办法是为您的视图推送一个模态导航控制器(它将隐藏您不需要的选项卡栏),或者获取选项卡栏控制器当前选择的视图控制器(实际上是您在选项卡中的导航控制器)并在其中推送新的视图控制器,然后在使用选项卡栏委托选择其他选项卡时弹出该视图。
但是,如果该视图是从模态对话框创建的,则将其推送到随机选项卡中似乎很奇怪。我认为,如果视图本身是模态的并且隐藏了选项卡,则没有理由不将其视为模态。请注意保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接