将 xib 视图初始化为另一个 NSView 的子视图

Posted

技术标签:

【中文标题】将 xib 视图初始化为另一个 NSView 的子视图【英文标题】:Initializing a xib view as a subview of another NSView 【发布时间】:2015-06-16 03:11:10 【问题描述】:

我正在尝试学习 OSX 开发,并且我在 .xib 文件中创建了一个视图,我正在尝试初始化然后将此视图添加为子视图。我已经用谷歌搜索了如何做到这一点,所有解决方案都适用于 ios,并使用诸如 MyViewClass* myViewObject = [[[NSBundle mainBundle] loadNibNamed:@"MyViewClassNib" owner:self options:nil] objectAtIndex:0] 之类的调用,但看起来这不是 OSX 开发的选项。有人对如何将 xib 初始化为视图有任何想法吗?谢谢

【问题讨论】:

【参考方案1】:

您可以使用loadNibNamed:owner:topLevelObjects: 方法。这是一个例子:

NSArray *views = nil;
[[NSBundle mainBundle] loadNibNamed:@"TestView1" owner:nil topLevelObjects:&views];
[self.view addSubview:[views lastObject]];

上面的代码会将 XIB 的***内容加载到一个数组中。根据文档:

从此包中加载具有指定文件名和所有者的 nib。 成功后,该方法返回 YES 和可选的输出参数 topLevelObjects 填充了 nib 的***对象。 对象遵循标准的 Cocoa 内存管理规则和 被自动释放。***对象的 IBOutlet 属性应该是 strong(保留)以证明所有权并防止重新分配。 或者,一个人可能对顶层有强烈的参考 对象数组。

【讨论】:

以上是关于将 xib 视图初始化为另一个 NSView 的子视图的主要内容,如果未能解决你的问题,请参考以下文章

如何将 xib 的子视图显示到另一个 xib 的表格单元加载中

使用 NSView 加载 Xib 文件

NSView 高级概述?

隐藏另一个子视图类的子视图

使用 IBOutlets 将视图控制器初始化为自定义视图

UIView transitionWithView 带有多个xib文件的子视图