2011-09-13 34 views
0

我想创建NSView的子视图并将其链接到MenuView.xib。用于NSMenuItem的NSView子类

我得:

- MenuView.m 
- MenuView.h 
- MenuView.xib 

在Xcode我创造了我的厦门国际银行,并设置为customclass我的 'MenuView'。现在,我想这样的编程方式添加我的新观点通过命令:

NSView *vv = [[MenuView alloc] initWithFrame:CGRectMake(0, 0, 300, 200)]; 

NSMenuItem *newItem = [[NSMenuItem alloc] initWithTitle:@"title" action:nil keyEquivalent:@""]; 
[newItem setView:vv]; 

但我只看到一个空的空间没有任何内容。我如何告诉MenuView.m类使用MenuView.xib文件进行渲染?那是错的吗?

谢谢。

回答

1

使用NSViewController,它设计用于从nib文件加载视图。在您的笔尖文件中,将NSViewController设置为文件的所有者,然后设置view出口文件的所有者,以便它指向您在笔尖的视图。

然后,你可以这样做:

NSViewController* viewController = [[NSViewController alloc] initWithNibName:@"YourNibName" bundle:nil]; 
YourCustomView* view = [viewController view]; //this loads the nib 
[viewController release]; 
//do something with view 
+0

谢谢你,简单的作品! – DeejonZ

0

从笔尖(改编自矿山的another answer)加载一个观点:

NSNib *nib = [[NSNib alloc] initWithNibNamed:@"MenuView" bundle:nil]; 
NSArray *nibObjects; 
if (![nib instantiateNibWithOwner:self topLevelObjects:&nibObjects]) return nil; 

NSMenuItem *item = nil; 

for (id obj in nibObjects) 
    if ([obj isKindOfClass:[NSMenuItem class]]) { 
     item = obj; 
     break; 
    } 

[someView insertSubview:item]; 

如果你想比self作为文件所有者以外的东西,将参数更改为instantiateNibWithOwner:

+0

我来试试你的方法尽快 – DeejonZ