Objective C - NSView中的XIB加载

时间:2012-11-11 23:16:58

标签: macos load xib nsview

我是Objective C编码的新手,MVC概念给了我一些痛苦。我的目标是开发一个Mac应用程序。我能够为主窗口创建一个.xib。它开始很好。 我的主要NSWindow有它的主要NSView。在这个NSView中,我放了3个子视图(使用Interface Builder)。我想要的是当我点击放在第一个子视图中的按钮时,更改第二个子视图的内容(通过从另一个XIB文件加载内容,称为SubWindow1.xib)。

我能够抓住点击并尝试了一些“xib加载”代码,但它不起作用(内容永远不会出现在我的第二个子视图中)。

我做的是:

  • 把NSButton(在第一个子视图上)
  • 在Interface Builder上放置一个NSObject(类重命名为CtMainWindow,“Ct”为Controler)
  • 链接IBAction(changeToSubWindow1)和IBOutlet(vSubView2,这是我的第二个子视图)
  • 创建CtMainWindow类,创建一个VwSubWindow1类(扩展NSView)

在changeToSubWindow1()中,我写道:

VwSubWindow1 * vProfile = [[VwSubWindow1 alloc] initWithFrame:vSubView2.bounds];
[vProfile loadXib];
[vProfile.superview addSubview:vProfile];

loadXib()函数执行:

NSNib * nib = [[NSNib alloc] initWithNibNamed:[self @"SubWindow1"] bundle:nil];  //@"SubWindow1" is the name of the expected loaded xib without .xib extention
[nib instantiateWithOwner:self topLevelObjects:nil];

和Voila。我希望在视图中加载子xib,并将该视图放在我的第二个子视图中,它会出现。

我还尝试在changeToSubWindow1()

中只放入以下代码
VwSubWindow1 * vProfile = [[VwSubWindow1 alloc] initWithFrame:vSubView2.bounds];
[vProfile loadSubWindow];

loadSubWindow()函数执行:

[NSBundle loadNibNamed:@"SubWindow1" owner:self];

没有更多的成功。

我已经从stackoverflow中读了很多线程并尝试了很多解决方案,但没有一个能为我工作。

任何人都可以给我提示我在子视图中加载和显示Xib所需的提示吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

你可以尝试这种方法

你可以放3个xib文件和3个窗口。连接每个窗口

self.packages = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
[self.window1.contentView addSubview:self.vc.view];
self.packages.view.frame = ((NSView*)self.window1.contentView).bounds;
[window1 makeKeyAndOrderFront:NSApp];