iphone - 当 UIViewController 是文件所有者时,为什么我无法在 Interface Builder 中编辑 UIViewController 的属性?

标签 iphone ios xcode xcode4 interface-builder

我创建了一个新的“Tab Bar app”项目,它为我提供了 FirstViewController.xib 和 SecondViewController.xib。

AppDelegate中,标签栏 Controller 的配置如下:

UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
self.window.rootViewController = self.tabBarController;

这显然是从 nib 文件加载 UIViewController 的实例,不是吗?但是当我打开 SecondViewController.xib 时,我看到的唯一根级对象是 View Controller 的 View 。这对我来说没有意义,因为我相信整个 UIViewController 实例实际上是从那个 Nib 出来的。

剩下的在哪里?为什么我看不到 UIViewController 属性(例如标题)?当我单击“文件所有者”时,“身份”选项卡显示“SecondViewController”,因此文件所有者肯定是一个 UIViewController,但似乎它没有存档在 Nib 中。事实上,该实例似乎是以编程方式创建的,并且 Nib 似乎仅存档 View 。

这很令人困惑,因为 nib 文件的名称是 SecondViewController.xib。有人可以澄清一下吗?

最佳答案

当一个对象是“nib 文件所有者”时,这意味着它在加载 nib 之前已经被实例化(不一定是“init'ed”)。当您加载 Nib 时,它不会创建所有者,它只是将 socket 连接到所有者。

我同意,令人困惑的是,您无法使用 IB 中的“属性”面板通过 initWithNibName 初始化的 View Controller 上的属性设置初始值。

但是,我相信您可以通过文件所有者的 IB 中的“用户定义的运行时属性”面板来设置文件所有者的属性值(仅限 XCode 4.2+、iOS5+)。

关于iphone - 当 UIViewController 是文件所有者时,为什么我无法在 Interface Builder 中编辑 UIViewController 的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12785555/

相关文章:

iphone - 数据格式化程序暂时不可用,将在 'continue' 后重试

ios - 获取当前设备方向

iOS:此方法适用于 iOS 设备吗?

iOS:类如何向 UI View 通知某些内容?

xcode - Xcode 7.2.1 的问题

iphone - 隐藏键盘的实用方法

ios - 超过 100 个用户可以测试 iOS 应用程序的 Beta 版本吗?

iphone - 这次黑客攻击会让苹果愤怒吗? (会拒绝我的应用程序吗?)

ios - 应用程序传输安全不适用于 .ninja 域名 (Swift2/XCode7)

swift - Xcode 成功构建但无法运行 macOS 应用程序