2

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

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

我所做的是:

  • 把 NSButton (在第一个子视图上)
  • 在 Interface Builder 上放置一个 NSObject(类重命名为 CtMainWindow,Controler 为“Ct”)
  • 链接 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];

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

我还尝试仅将以下代码放入 changeToSubWindow1()

VwSubWindow1 * vProfile = [[VwSubWindow1 alloc] initWithFrame:vSubView2.bounds];
[vProfile loadSubWindow];

loadSubWindow() 函数执行以下操作:

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

没有更多的成功。

我已经从 stackoverflow 中阅读了很多线程并尝试了很多解决方案,但没有一个对我有用。

谁能给我我需要的提示,以便在子视图中加载和显示 Xib?

提前致谢。

4

1 回答 1

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];
于 2014-09-08T01:24:07.630 回答