Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用NSView加载Xib文件_Objective C_Cocoa_Macos - Fatal编程技术网

Objective c 使用NSView加载Xib文件

Objective c 使用NSView加载Xib文件,objective-c,cocoa,macos,Objective C,Cocoa,Macos,我在MainMenu.xib中有一个自定义视图,它将包含2个子视图。这些子视图应该从一些具有单个NSView的xib文件加载。 我该怎么做? 包含每个xib的IBOutlet和IBActions的类应该从哪个类继承?对于每个xib,我必须将文件所有者设置为包含outlet/actions的类。您的自定义视图或主菜单的头文件应该包含您提到的2个子视图,并且您应该将它们列为IBOutlet成员和IBOutlet属性。(别忘了合成!) 在xib文件中,您应该能够拖动2个NSView,然后将它们的类设置

我在MainMenu.xib中有一个自定义视图,它将包含2个子视图。这些子视图应该从一些具有单个NSView的xib文件加载。 我该怎么做?
包含每个xib的IBOutlet和IBActions的类应该从哪个类继承?对于每个xib,我必须将文件所有者设置为包含outlet/actions的类。

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

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

您可以使用:

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

要加载您的xib文件,topLevelObjects参数是一个通过引用传递的数组,调用函数后它将包含来自您的xib的对象数组,您感兴趣的是NSView类型的对象,您可以将视图添加到您想要的任何位置

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