我正在构建一个应用程序,其中根视图/窗口是基于选项卡的视图(使用XCode向导创建,用于创建基于选项卡的iPhone应用程序),但应用程序中还有一个点我想要创建另一个基于选项卡的视图并以模态方式呈现。
我在IB中创建基于模式选项卡的视图时遇到了很多麻烦,我最终只是在代码中创建了它,有点像这样:
// *** In the event handler that causes the second-tab view to be presented ***
MyTabViewController *tabVC = [[MyTabViewController alloc] init];
[self presentModalViewController:tabVC.tabBarController animated:YES];
[tabVC release];
// *** Inside init() definition in MyTabViewController.m ***
UIViewController *vc1 = [[MyViewController1 alloc] init];
UIViewController *vc2 = [[MyViewController2 alloc] init];
tabBarController_ = [[UITabBarController alloc] initWithNibName:nil bundle:nil];
tabBarController_.viewControllers = [NSArray arrayWithObjects:vc1, vc2, nil];
tabBarController_.selectedIndex = 0;
这很好用,直到我开始尝试写入tabBarController_.tabBar.items来设置按钮的标题和图像,它显然不想让你为TabBarController拥有的TabBar做什么,这个错误:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason:
'Directly modifying a tab bar managed by a tab bar controller is not allowed.'
所以我尝试使用Interface Builder重新实现MyTabViewController,以便我可以在那里设置按钮,但我无法理解。以下是我采取的步骤:
我无法弄清楚的是如何让TabBar接管视图。现在,XIB自带的View是空的,我有这个UITabBarController与它完全断开连接。如果我尝试将TabBar从UITabBarController中拖动到View中,它似乎会创建一个新的TabBar而不是将我的TabBar定位到视图中,以便它占据整个视图。
如果我没有非常清楚地解释这一点,我很抱歉,但我真的很难理解TabBarController和View之间的联系,即无法弄清楚如何让TabBarController实际显示。
对此的任何帮助将不胜感激。如果这有帮助的话,我已经附上了IB的屏幕抓片。
答案 0 :(得分:3)
标签栏控制器从其管理的视图控制器中选取标签和标签图像。标签来自视图控制器'title
。该图像来自视图控制器的tabBarItem
属性。您可以在MyViewController1和MyViewController2的init方法中设置这两个。
- (id)init {
if (self = [super initWithNibName:@"MyViewController" bundle:nil]) {
self.title = @"My View Controller";
UIImage* anImage = [UIImage imageNamed:@"MyViewControllerImage.png"];
UITabBarItem* theItem = [[UITabBarItem alloc] initWithTitle:@"Home" image:anImage tag:0];
self.tabBarItem = theItem;
[theItem release];
}
return self;
}
每个视图控制器都有view
属性。标签栏控制器也是一个视图控制器,因此它也具有view
属性。将标签栏控制器的view
属性添加到当前为空的视图中。
示例:
[view addSubview:tabBarController.view];
如果您有任何疑问,请参阅documentation。它非常完整。