我曾经也被它困住并放弃了那个东西 - 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];
}