我用坚持与如拿,放弃了那个东西 - 蓝色圆圈在它从IB调色板白色边框的视图。我现在从代码创建我的控制器,并且只通过文件所有者在IB中设置一个引用到拥有的控制器类:右键单击文件所有者,在“身份”检查器中输入类名称,然后从文件的所有者视图连接到视图。
在你的代码,那么你在适当的初始化点事:
[self setMyViewController = [[MyViewController alloc] initWithNibName: @"MyView" bundle: [NSBundle mainBundle]]
针对您的特殊情况下,当从它的笔尖加载你的窗口和做好工作的准备,这可能是在windowDidLoad
方法。然后,您可以将视图添加到您的Windows内容视图。你也可以考虑在视图和视图控制器之间有1:1的关系。它在维护方面让生活变得更加轻松。
编辑:像@pcperini表明在他的评论,你可以使用调色板成分,但你仍然需要在你的代码来实例化控制器。如果你想使用的调色板组件,在主控制器或AppDelegate中创建一个属性:
@property (...) MyViewController *myViewController;
添加的代码实际上是创建控制器(见上文)行。然后,使用绑定检查器将选项板组件绑定到myViewController
属性。
所以,你缺少的是你实际上没有实例化控制器对象。编辑2:这里是代码(awakeFromNib是顶部控制器的方法)。它创建两个子控制器,每个处理不同的子视图:
- (void) awakeFromNib {
[[self startEndTopicHeader] setHeader: @"Event timeline boundary"];
[[self startDateHeaderView] setHeader: @"Event (start) date"];
[[self endDateHeaderView] setHeader: @"Event end date"];
[self setStartDateViewController: [[EventTimeViewController alloc] initWithNibName: @"EventTimeView" bundle: [NSBundle mainBundle]]];
[[[self startDateViewController] view] setFrame: [[self dummyStartView] bounds]];
[[self dummyStartView] addSubview: [[self startDateViewController] view]];
[[self startDateViewController] setParentController: self];
[self setEndDateViewController: [[EventTimeViewController alloc] initWithNibName: @"EventTimeView" bundle: [NSBundle mainBundle]]];
[[[self endDateViewController] view] setFrame: [[self dummyEndView] bounds]];
[[self dummyEndView] addSubview: [[self endDateViewController] view]];
[[self endDateViewController] setParentController: self];
}
从什么引用'NSViewController'? – 2012-02-04 22:18:55
我将它添加到xib文件(拖放),然后将其类分配给我使用IB创建的类。右侧有一个选项卡,可让您设置其“文件所有者”。 – mtmurdock 2012-02-04 22:21:55
没错,但是如果你只是在'xib'中的任何地方放置一个对象,它不一定会渲染,特别是像'NSViewController'这样的非View对象。你必须从代码实例化NSViewController(在这种情况下,你的'xib'将把它作为'File's Owner'来引用它),或者把它设置成你的ApplicationDelegate的'window'的'rootViewController' 。 – 2012-02-04 22:27:30