【问题标题】:Hidden UINavigationController inside UITabBarController隐藏在 UITabBarController 内的 UINavigationController
【发布时间】:2010-09-22 00:14:05
【问题描述】:

我有一个应用程序,每个应用程序有 5 个UIViewControllers,每个UINavigationController 都包含在一个UITabBarController 中,在屏幕底部显示 5 个选项卡。

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

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

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

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

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


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

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

【问题讨论】:

    标签: ios cocoa-touch cocoa


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2010-11-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多