3

我有一个应用程序,UIViewController每个 5 s 在一个对应的 s 内UINavigationController,全部隐藏在 aUITabBarController中,在屏幕底部显示 5 个选项卡。

我想在按下对话框按钮时显示另一个UIViewController(在 a 内)。UINavigationController

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

如果我添加[UINavigationController view][self window]UITabBar覆盖。如果我将它添加到任何其他图层,则UINavigationController它对状态栏的补偿增加,因此看起来比预期的要低。

一个解决方案是将第 6 个与其他的一起UINavigationController添加到第 6 个中UITabBar,但将其tabBarItem隐藏。tabBar然后我可以使用sselectedIndex属性显示和隐藏它。

tabBarItem通过UIViewController节目访问没有明显的方法可以做到这一点。


@wisequark,我认为你完全误解了,你几乎重写了我的应用程序的架构。但是,我为每个视图都有一个单独的导航控制器,因为它们是互斥的,并且没有“向下钻取”的概念。

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

4

3 回答 3

15

听起来好像你手上一团糟。AUINavigationController是一个与 a 非常不同的独特对象UITabBarController。通常,您的应用程序应该有一个选项卡控制器,其中一个选项卡的加载者UINavigationController依次加载它的视图——而不是两者都维护对不同视图的管理。UIViewController将 a 的显示称为这样的对象没有视觉表示也是不恰当的。在 a 的情况下UINavigationController,导航控制器对象负责显示导航栏和表格视图(在最常见的情况下)并管理导航层次结构中所有视图的显示。它本身在屏幕上没有相应的表示。同样,一个UITabBarController呈现一个选项卡栏,负责加载和卸载附加到选项卡按钮的视图和/或视图控制器。如果我们将其呈现为图像,它将看起来像这样 - 替代文本 http://img.skitch.com/20081112-2sqp7q4wafa34te1ga337u4k8.png

于 2008-11-12T17:40:43.183 回答
4

好吧,听起来你真正想要做的是呈现一个模式视图,其中标签栏仍然可见。您可以将视图添加为标签栏控制器视图的子视图。奇怪的是,标签栏的视图不是标签栏本身,而是包含标签栏和所选项目视图的视图。

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

再想一想:由于您的五个视图控制器中的每一个都是 UINavigationController,因此您始终可以将 ViewController:animated: 推送到选定的视图控制器上,然后隐藏后退按钮。您的视图只会出现没有动画。但是您需要记住,每当用户切换到另一个选项卡时,将您的视图控制器从堆栈中弹出。这可能需要更多的工作。

于 2008-11-13T17:05:21.143 回答
2

我能想到的最好的主意是为您的视图推送一个模式导航控制器(这将隐藏您不想要的标签栏),或者让标签栏控制器当前选择的视图控制器(实际上是您的导航控制器一个选项卡)并将您的新视图控制器推到那里 - 然后在使用选项卡栏委托选择另一个选项卡时弹出该视图。

不过,将视图推送到随机选项卡上对我来说似乎很奇怪,如果视图是从模态对话框创建的,我不明白为什么视图本身也不应该是模态的并隐藏选项卡。

于 2008-11-12T20:35:56.873 回答