从XIB加载UITabBarController不包含XIB中的任何内容

Jos*_*ach 2 cocoa-touch interface-builder uitabbarcontroller ios

我正在开发一个基于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];
Run Code Online (Sandbox Code Playgroud)

但是,我没有获得预期的预制标签栏控制器,而是获得了一个完全空的标签栏控制器.

我错过了什么吗?为什么我不能从笔尖加载预先构建的UITabBarController?

Nic*_*ood 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];
Run Code Online (Sandbox Code Playgroud)

解释原因有点棘手,但这与文件所有者的工作方式有关.如果在nib文件中定义了选项卡栏控制器,则无法将nib文件加载到选项卡栏控制器中.

Nib总是必须由nib中定义的对象上方一个对象加载 - 因此app委托可以加载视图控制器,视图控制器可以加载视图等.但是视图控制器(包括TabBarController)可以'加载自己.