ios - 从 XIB 加载 UITabBarController 不包含来自 XIB 的任何内容

标签 ios cocoa-touch interface-builder uitabbarcontroller

我正在开发一个项目,该项目最初是基于 TabBarController 的应用程序,现在大部分仍然是,但是一些要求已经改变,我们需要放入一个初始 View Controller 作为应用程序其余部分的入口点- 在提供身份验证并加载一些内容后,将在主窗口中由选项卡栏 Controller 替换。

原来的 UITabBarController 是 MainWindow.xib 的一个组件,它的所有根导航 Controller 都设置了 Root View Controller ,一切都很顺利。我想我可以简单地从 MainWindow.xib 中提取 UITabBarController 组件,将它放在自己的 CustomTabBarController.xib 中,然后运行 ​​

[self setTabBarController:[[[UITabBarController alloc] initWithNibName:@"CustomTabBarController" bundle:nil] autorelease]];
[_tabBarController setDelegate:self];
[self.window addSubview:_tabBarController.view];

但是,我得到的不是预建的标签栏 Controller ,而是一个完全空的标签栏 Controller 。

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

最佳答案

试试这个:

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 文件中定义了标签栏 Controller ,则无法将 nib 文件加载到标签栏 Controller 中。

Nib 总是必须由比 nib 中定义的对象高一级的对象加载 - 因此应用程序委托(delegate)可以加载 View Controller , View Controller 可以加载 View 等。但是 View Controller (包括 TabBarController ) 无法自行加载。

关于ios - 从 XIB 加载 UITabBarController 不包含来自 XIB 的任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9234500/

相关文章:

ios - 尝试在一个屏幕上显示三张全景照片时应用程序崩溃

iphone - 更改 tabbaritem 的字体大小

ios - 一个View作为所有ViewController中的Status View

ios - 使用数据源向 UITableView 添加一行

objective-c - 键盘出现在 View 顶部,不允许用户交互

iphone - 将导航栏转换为标签栏应用程序

swift - 将手势识别器添加到空白标签

ios - WKWebView iOS 中的 Google 登录按钮没有响应

iOS utf-8 编码问题

ios - 在 iOS9 Interface Builder 中,如何将 View 保持在状态栏下方?