NSWindow 与 ViewController - OS X - Cocoa

NSWindow vs ViewController - OS X - Cocoa

我制作 iOS 应用程序已经有一段时间了,我决定也开始为 Mac 制作一些应用程序。

我的问题是:现在 Mac 的开发与 iOS 如此相似,是否需要 NSWindow??

所以我使用 Xcode 制作了一个简单的 cocoa 应用程序,它带有一个名为 "Main" 的故事板,就像 iOS.

在那个故事板文件中,有一个 NSWindow,然后链接到 NSViewController。

我可以去掉那个 NSWindow 吗?当我尝试将 NSViewController 设置为 "Initial Controller" 时,应用程序仍然运行良好。那么 NSWindow 的意义何在?

此外,什么 class 链接到 NSWindow?我试图模糊 NSWindow 的背景,但我无法将代码链接到 NSWindow。

抱歉提出愚蠢的问题,但我对 OS X 的开发完全陌生。

谢谢你的时间,丹。

一个问题中有很多问题:

  1. 我可以摆脱 NSwindow 吗?不,您需要一个 window 来显示您的观点。
  2. NSWindow 的意义何在? NSWindow 是必需的,因为 window 在其中显示视图并且您的事件在响应者链中上升。
  3. 什么 class 链接到 NSWindow?显然是 NSWindow class,但这不是您想知道的。我想你想知道控制 NSWindow 的委托。这是 NSWindowController,尽管对于 MainMenu.xib 它是 NSAppDelegate。

希望这能为您提供所需的答案。此 中给出了在 window 中使用视图的示例。

请参阅 windows programming guide 了解更多详情,其中指出:

The NSWindow class defines objects that manage and coordinate the windows an application displays on the screen. A single NSWindow object corresponds to at most one onscreen window. The two principal functions of an NSWindow object are to provide an area in which NSView objects can be placed and to accept and distribute, to the appropriate views, events the user instigates through actions with the mouse and keyboard.

对于问题:我可以摆脱 NSwindow 吗?我还有进一步的意见。在大多数情况下,您需要一个 NSWindow 来在​​屏幕上显示视图;但在特殊情况下,例如,当您单击 NSStatusItem 时,您不会弹出视图。 所以我的回答是每当你需要响应 window 事件,比如 min/max,你需要 NSWindow 作为视图容器。