Interface Builder 是如何知道 UIViewController 的视图的?

Posted

技术标签:

【中文标题】Interface Builder 是如何知道 UIViewController 的视图的?【英文标题】:How does Interface Builder know about UIViewController's view? 【发布时间】:2009-08-14 15:03:50 【问题描述】:

UIViewController 有一个名为 view 的 ivar(和 @property)。然而,它不是 IBOutlet。

在 Interface Builder 中创建视图 nib 时,通常将 File's Owner 设置为 UIViewController(或其子类),并将 nib 的视图连接到 File's Owner 的 view 插座。

如果 UIViewController 视图成员不是 IBOutlet,这将如何工作?

【问题讨论】:

【参考方案1】:

IBOutlet 关键字用于指示应在 Interface Builder 中显示您编写的类的属性。 Interface Builder 内部对系统提供的类有额外的了解。

如果您在桌面而不是 iPhone 上使用 Interface Builder,您可以编写 Interface Builder 插件以将您的自定义类集成到 Interface Builder 库中(这在 iPhone 的 Interface Builder 中不受支持)。在编写插件时,插件作者提供“类描述”文件,这些文件向 Interface Builder 声明相同的操作/出口信息,就像使用 IBAction/IBOutlet 关键字实现的一样。您可以在Interface Builder Plug-In Programming Guide 中了解更多信息。

它对系统提供的类的工作方式与对插件的工作方式基本相同。

【讨论】:

【参考方案2】:

我不久前阅读了this article,它终于为我将它们联系在一起了。也许对你有帮助?

【讨论】:

【参考方案3】:

简单的答案是 Apple 编写了 Interface Builder 和 UIViewController

【讨论】:

【参考方案4】:

UIViewController 的视图属性就是这样,一个属性。 UIViewController 的全部目的是控制视图。 view 属性允许您将该视图分配给 UIViewController。这就是视图的目的,也是它出现在 IB 中的原因。这是一个财产。就像 textLabel 是 UILabel 的一个属性一样。

【讨论】:

blackColor 是 UIColor 上的类方法,而不是属性!问题不在于 view 属性的用途,而是为什么 IB 将其视为一个出口,尽管该属性上没有 IBOutlet 声明。 添加了另一个属性示例。 textLabel 仍然不是 UILabel 的属性。这不是这个问题的意义所在。我确实了解属性,而不是 UIViewController 的视图在 IB 中的处理方式不同。但我想我现在找到了答案。

以上是关于Interface Builder 是如何知道 UIViewController 的视图的?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Interface Builder 中创建 NSTableRowView 原型

如何指定我希望 UI 元素在 Interface Builder 中进行方向更改的位置?

如何在 Interface Builder 中存储键/值并在运行时访问它们?

如何通过编写 Objective-C 代码来动态更改 Interface Builder xib 文件?

如何在 Interface Builder 中更改 UIButton 的背景图像并保留其形状?

如何使用 Interface Builder 在其他 UI 元素的背景中添加 UIButton?