使用 NSView 加载 Xib 文件

Posted

技术标签:

【中文标题】使用 NSView 加载 Xib 文件【英文标题】:Load Xib Files with NSView 【发布时间】:2011-06-27 10:31:46 【问题描述】:

我在 MainMenu.xib 中有一个自定义视图,其中包含 2 个子视图。这些子视图应该从一些具有单个 NSView 的 xib 文件中加载。 我怎样才能做到这一点? 包含每个 xib 的 IBOutlet 和 IBActions 的类应该从哪个类继承?对于每个 xib,我必须将文件所有者设置为包含出口/动作的类?

【问题讨论】:

【参考方案1】:

你可以使用:

- (BOOL)loadNibNamed:(NSString *)nibName
               owner:(id)owner
     topLevelObjects:(NSArray * _Nonnull *)topLevelObjects

加载你的xib文件,topLevelObjects参数是一个通过引用传递的数组,调用函数后它将包含你的xib中的对象数组,你感兴趣的是一个NSView类型的对象,你可以添加到任何地方的视图

【讨论】:

【参考方案2】:

您的自定义视图或主菜单的头文件应该#include 您提到的 2 个子视图,并且您应该将它们列为 IBOutlet 成员和 IBOutlet 属性。 (别忘了合成!)

在您的 xib 文件中,您应该能够拖入 2 个 NSView,然后将它们的类设置为您的 2 个子类,然后通过从“文件所有者”拖动到“对象”列表中的对象来链接它们。

【讨论】:

也许我没有解释清楚...我想从 MainMenu.xib(由 xcode 创建)中的 xib 文件加载 2 个 NSView。这个 mainMenu.xib 包含一个 NSView,我想在其中加载 2 个前面提到的 xib。我正在为 mac 开发 我也想知道将带有 Outlets/Actions 的类链接到 xib 文件的最佳/正确方法(并在 IB 中查看它们)。我应该在文件所有者中设置我的自定义类还是拖动一个 NSObject(来自 IB 的对象库)? 您的第一条评论:是的,我写的是 UIView 而不是 NSView……但它们基本相同,我写的应该仍然有效。第二条评论:由于您的子类继承自 NSView,如果您将 NSView 对象拖到 Interface Builder 中,然后将它们的类设置为子类的类(在身份检查器选项卡上),那么它们应该可以正常工作。当然,您仍然需要在主菜单的 loadView:(或类似)方法中初始化它们。

以上是关于使用 NSView 加载 Xib 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Swift 3从Xib加载NSView

从 nib 以编程方式从 NSView 的子类加载对象

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

Interface Builder:如何从 nib 文件加载视图

cocoa - 视觉编辑/设计 NSView

xib 文件中的 addSubviews 包含两个或多个自定义视图