4

我有一个简单的项目,它由一个简单的窗口组成,其中一个视图来自 NSViewController(参见http://i.stack.imgur.com/UAn6L.png

在此处输入图像描述

该视图被管理(+ 链接,请参见屏幕截图)到我的自定义视图控制器对象。

我将 ViewController 对象拖到 MainMenu.xib 中,连接视图出口并设置 Controller-Class + Nib-Name。

当我启动应用程序时,我的自定义视图不会显示在窗口中(在我的自定义 NSViewController 子类中调用了“awakeFromNib”!)。

请参阅屏幕截图了解 IB 详细信息 -> http://i.stack.imgur.com/UAn6L.png

有什么我想念的想法吗?

4

2 回答 2

3

我假设您有一个单独的 Nib,命名CustomImageView为未图示(由 Xcode 自动创建的)。在这种情况下,您可以将控件和绘图代码添加到该单独 Nib 中的视图中。要将视图控制器的视图实际添加到窗口中,您必须通过从 AppDelegate 到视图控制器的 IBOutlet 连接以编程方式完成,并在要添加视图时添加以下代码:(通常在applicationDidFinishLaunching:

[viewController.view setAutoresizingMask:(NSViewWidthSizable|NSViewHeightSizable)];
[viewController.view setFrame:NSInsetRect([window.contentView bounds], 20, 20)];
[window.contentView addSubview:viewController.view];

这将像您在屏幕截图中一样将其插入并居中。问题在于,通过view在 MainMenu Nib 中创建连接,您将覆盖单独的CustomImageViewNib 中的连接。您可以删除窗口中的自定义视图对象...您必须以编程方式添加自定义视图。如果它以这种方式工作会很好,但事实并非如此。

编辑:

这是因为笔尖未归档的顺序。首先实例化 CustomImageView 并建立其所有连接。至此,该view属性已正确设置。然后 MainMenuview再次连接属性,覆盖view单独 Nib 中的属性。现在视图属性设置不正确。这是正常的行为。如果您使用单独的 nib,则必须保持未连接并在代码中添加视图控制器的视图。

另一种方法是不使用单独的笔尖。只需将其从您的项目中删除,设置您的视窗并保持您的连接不变。现在您可以有一个单独的视图控制器来管理它,而无需添加任何代码。如果视图非常复杂,或者你想根据需要延迟加载它,你真的只需要一个单独的 Nib,比如用户可以为主窗口选择不同的视图。

于 2011-12-24T19:55:05.787 回答
1

我删除了我之前的答案,因为我认为您正在为 iOS 设备开发。现在我意识到它是一个标准的 Mac OS 项目。但无论如何,我所说的关于设置初始视图控制器的内容保持不变。好的,你有一个自定义的 NSViewController 对象,它有一个 NSView 对象。直到这里都很好。但是,应用程序如何知道它启动时要显示什么视图。您应该将初始视图设置为 NSViewController 的视图,或者将初始视图控制器设置为 NSViewController 对象本身,以便它知道在开始时要显示什么。如果它那么简单,我希望看到你的项目。只需将其发送到我的电子邮件。

于 2011-12-24T13:55:21.810 回答