2008-11-12 160 views
2

我有一个应用程序,每个应用程序都有对应的UINavigationController,它们都放在UITabBarController的内部,在屏幕底部显示5个选项卡。UITabBarController中的隐藏的UINavigationController

当按下对话框按钮时,我想要显示另一个UIViewController(位于UINavigationController内)。

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

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

解决方法是将第6个UINavigationController与其他的UITabBar相加,但隐藏其tabBarItem。然后我可以使用tabBar s selectedIndex属性将其隐藏。

通过UIViewController访问tabBarItem显示没有明显的方法。


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

@Kendall,这是我期望我必须做的 - 让模态视图带有一个隐藏按钮来恢复正常的界面。但是保持标签栏始终可见,这将是很好的,所以我只是想知道有没有人知道一种方式。

回答

3

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

或者,也可以尝试调用presentModalViewController:动画:与所选选项卡(即[tabBarController.selectedViewController presentModalViewController:动画:])作为接收器而不是标签栏。我似乎记得曾经这样做过(非常偶然),标签栏仍然可见。

还有一个想法:因为每个您的五个视图控制器是一个UINavigationController,你总是可以pushViewController:动画:到选定的视图控制器,然后隐藏后退按钮。您的视图将只显示没有动画。但是,当用户切换到另一个选项卡时,您需要记住将视图控制器从堆栈弹出。这可能需要更多的工作。

15

听起来好像你的手上有一团糟。 A UINavigationController是与UITabBarController完全不同的对象。一般来说,你的应用程序应该有一个标签控制器,其中一个标签的加载UINavigationController,然后加载它的意见 - 而不是都维护管理不同的意见。指代UIViewController的显示也是不恰当的,因为这样的对象没有可视化表示。在UINavigationController的情况下,导航控制器对象负责显示导航栏和表格视图(在最常见的情况下)以及管理导航层次结构中所有视图的显示。它本身在屏幕上没有相应的表示。同样,UITabBarController提供了一个标签栏,并负责加载和卸载附加到标签按钮的视图和/或视图控制器。如果我们把这位为图像,它会是这个样子 - alt text http://img.skitch.com/20081112-2sqp7q4wafa34te1ga337u4k8.png

2

我能想到的最好的办法是要么推动您的视图模式导航控制器(这将隐藏标签栏这你不需要),或者让标签栏控制器当前选定的视图控制器(真的是你的导航控制器的标签),并推动你的新视图控制器 - 然后弹出该视图时,另一个选项卡与标签栏委托。

虽然如果视图是从模态对话框创建的,但我不明白为什么视图本身不应该也是模态并隐藏标签,所以我认为将视图推送到随机选项卡似乎更加困难。

相关问题