我正在开发一个基于TabBarController的应用程序开始的项目,但仍然主要是,但是一些要求已经改变,我们需要将初始视图控制器作为应用程序其余部分的入口点 - 在给出认证并加载一些东西之后,将在主窗口中由标签栏控制器替换。
原始的UITabBarController是MainWindow.xib的一个组件,它的所有根导航控制器都设置了根视图控制器,一切都很顺利。我想我可以简单地从MainWindow.xib中提取UITabBarController组件,将它放在自己的CustomTabBarController.xib中,然后运行
[self setTabBarController:[[[UITabBarController alloc] initWithNibName:@"CustomTabBarController" bundle:nil] autorelease]];
[_tabBarController setDelegate:self];
[self.window addSubview:_tabBarController.view];
然而,我没有获得预期的预制标签栏控制器,而是获得了一个完全空的标签栏控制器。
我错过了什么吗?为什么我不能从笔尖加载预先构建的UITabBarController?
答案 0 :(得分:5)
请改为尝试:
NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"CustomTabBarController" owner:nil options:nil];
UITabBarController *controller = [nibContents objectAtIndex:0];
[self setTabBarController:controller];
[_tabBarController setDelegate:self];
[self.window addSubview:_tabBarController.view];
解释原因有点棘手,但这与文件所有者的工作方式有关。如果在nib文件中定义了选项卡栏控制器,则无法将nib文件加载到选项卡栏控制器中。
Nib始终必须由nib中定义的对象上方一个对象加载 - 因此app委托可以加载视图控制器,视图控制器可以加载视图等。但是视图控制器(包括TabBarController) )无法装载自己。