1

这是我的问题:

我已经阅读了很多关于如何在基于导航的应用程序中使用标签栏的内容,但我仍然无法弄清楚。我尝试过使用和避免使用标签栏控制器,但我找不到解决方案。

我已经有一个基于导航的应用程序正在运行。我有几个 nib 文件(视图),每个文件都有自己的视图控制器,我以编程方式将其推送到导航控制器堆栈上。我需要其中一个视图有一个标签栏,允许我在其他一些视图之间切换。我了解标签栏的工作原理,并且我确实认为我需要使用标签栏控制器,因为它允许我定义与每个标签栏项目关联的视图控制器,并管理它们的所有内容。但是,我看不到该怎么做。

如果我确实在我的“tabBarViewController”中声明了一个标签栏控制器,在我的“tabBarView”中绘制标签栏控制器并将它们与 IB 链接,它会给我一个错误(我认为这是因为我没有真正推动标签栏控制器的视图?我需要与“[window addSubView:[tabbarcontroller view]] 等效的东西吗?)。在这种情况下,我只需要知道如何在视图中“查看”标签栏控制器的顶视图控制器的视图我已经推送了控制器。

如果我尝试不使用标签栏控制器,正如我所读到的,这是解决此问题的最佳方法,¿我如何管理标签栏项目,它们之间的切换等?

我将衷心感谢您的帮助。

4

3 回答 3

0

您不能将标签栏控制器推送到导航控制器堆栈上。只是没有支持的方式来做到这一点。

您可能要考虑的是创建自己的 UITabBar 实例,然后使用符合 UITabBarDelegate 的委托。这样,tabBar:didSelectItem:只要用户选择了标签栏项目,您的代理就会收到消息。但是,您必须自己管理itemsbar 的 NSArray,而不使用 IB。

一旦你弄清楚了,剩下要做的就是将一个常规的 UIViewController 像其他任何东西一样推送到你的导航堆栈上,然后让那个控制器管理你的标签栏和委托。

于 2009-10-05T18:10:40.727 回答
0

我刚刚制作了一个带有 tabBar 控制器和 5 个 navControllers 的应用程序。您需要做的就是在 tabBar 控制器的第一个元素中加载 nib 和导航控制器。即使视图在其中,您也可以隐藏 tabBar,并使其显示在您需要的视图中。

于 2011-08-15T14:52:43.693 回答
-1

您可以使用一些代码来做到这一点,如下所示:

FooViewController *foo = [[FooViewController alloc] init];
BarViewController *bar = [[BarViewController alloc] init];

UITabBarController *tabby = [[UITabBarController alloc] init];
[tabby setViewControllers:[NSArray arrayWithObjects:foo, bar, nil] animated:NO];
[self.navigationController pushViewController:tabby animated:YES];
[foo release];
[bar release];
[tabby release];

您也可以使用 IB 来完成,只需从 nib 加载标签栏控制器。

我构建了一个示例项目来演示这一点,您可以从http://s3.thismoment.com/navtab.zip下载它

于 2009-10-05T21:03:50.720 回答