【问题标题】:Adding a new window in Cocoa在 Cocoa 中添加一个新窗口
【发布时间】:2013-08-20 12:59:07
【问题描述】:

我是 Cocoa 编程的初学者。我只想知道如何在 Cocoa 中创建一个新窗口。我创建了一个 NSViewController 和窗口。如教程中所示,我能够向 MainMenu 窗口添加按钮并向按钮添加操作。现在我添加了一个新的 NSViewController。然后我去了 plist 文件并首先加载它。我的问题如下。

添加新的 NSViewController 时,创建了 h m 和 xib 文件,但 XIB 文件只有自定义窗口,没有其他控制元素,如最小化最大按钮等。

其次,我添加了一些元素并运行了文件。应用程序运行但屏幕上没有显示任何内容。我是不是错过了什么。

【问题讨论】:

  • 为视图控制器制作的 nib 文件包含一个 NSView(控制器的名称暗示了这一点)。窗口是 NSWindow 的一个实例,如果你想要一个现成的控制器,你会寻找 NSWindowController。 This 提供了很好的概述。
  • @Monolo 好的,但是当我创建一个新的 NSWindowController 时不会自动创建 xib 文件。
  • 不,但您可以自己制作。自动创建的并不比你自己制作的好。我在第一条评论中添加的文档是一个很好的起点。

标签: objective-c macos cocoa


【解决方案1】:

如果你添加一个新的 Nib 文件,你通常只会创建一个新的NSWindowController

在 Nib-Files 中分离窗口或分离视图的好处是:

  1. 让您的代码更有条理
  2. 同一类型的多个窗口(如浏览器窗口)的简单实例化

如果您不需要这个,您可以简单地在 MainMenu.xib 中添加一个新窗口。
然后,您可以让窗口在启动时可见,或者为它设置一个出口,让它随时可见。


否则你可以去你的文件 -> 添加新文件 -> NSWindowController 的子类
将有一个复选框自动为您创建 xib 文件,请务必选中。

现在只需确保使用initWithWindowNibName: 进行初始化,然后在其上调用showWindow:

MyWindowControllerSubclass *wcs = [[MyWindowControllerSubclass alloc] initWithWindowNibName:@"TheNameOfMyNib"];
[wcs showWindow:self];

【讨论】:

  • 对于 NSWindowController 的子类,没有创建 xib 文件的选项
【解决方案2】:

我使用的是 XCode 4.2。现在我更新到 4.6.3。现在在创建 NSWindowController xib 文件创建选项时。所以它直接完成。

否则你需要添加一个窗口控制器和一个新的窗口 XIB。稍后您可以将对象添加到属性选项卡。然后将类更改为Window Controller,并将Window链接到Object。

【讨论】:

    【解决方案3】:

    如果你想将视图控制器添加到窗口中,那是相当简单的。 NSViewController 有一个名为 view 的属性。您可以将此视图添加到 window.contentView。

    您通常会创建一个带有视图的新 xib 文件并将文件所有者设置为您的视图控制器。然后在 -(id)initWithNibName: 方法中,您可以使用视图的 nib 名称调用 super 以使用其视图实例化控制器。

    如果你想显示一个新窗口。然后创建一个新的 NSWindowController 对象并实例化它,使用窗口的 nib 和在控制器上调用窗口应该将窗口带到前面。如果您的窗口已经被初始化,您可以在控制器的窗口上调用orderFront:orderBack:等方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多