【问题标题】:Initializing a xib view as a subview of another NSView将 xib 视图初始化为另一个 NSView 的子视图
【发布时间】:2015-06-16 03:11:10
【问题描述】:
我正在尝试学习 OSX 开发,并且我在 .xib 文件中创建了一个视图,我正在尝试初始化然后将此视图添加为子视图。我已经用谷歌搜索了如何做到这一点,所有解决方案都适用于 iOS,并使用诸如 MyViewClass* myViewObject = [[[NSBundle mainBundle] loadNibNamed:@"MyViewClassNib" owner:self options:nil] objectAtIndex:0] 之类的调用,但看起来这不是 OSX 开发的选项。有人对如何将 xib 初始化为视图有任何想法吗?谢谢
【问题讨论】:
标签:
objective-c
macos
cocoa
xib
nib
【解决方案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(保留)以证明所有权并防止重新分配。
或者,一个人可能对顶层有强烈的参考
对象数组。