30

I am coming from iOS background and starting to learn Cocoa. On iOS unless we have multiple targets for iPad and iPhone we usually have one Window and manage the screen using UIViewControllers. Where every new screen will most of the time will map to a UIViewController.

However on cocoa this seems to be the otherway around where a new screen/window is manage by NSWindow and it's subcomponents are managed by NSViewController. So if I have multiple window app I should have separate NSWindowController for each window.

Is this approach correct or am I having a misunderstanding ?

4

3 回答 3

14

在 iPhone SDK 和 Leopard SDK 中,他们引入了视图控制器,即 NSViewController 和 UIViewController。正如他们的名字所暗示的那样,他们所做的是管理视图

视图控制器用于管理视图。UI设计的当前趋势是单窗口,多视图。这意味着有一个窗口,在它里面,为不同目的设计的不同组的视图可以被换入和换出。因此,视图控制器为程序员处理这些已建立的模式。目前,视图控制器对于 iPhone 和 iPod touch 编程非常重要,因为该平台基于单窗口和多视图模型。但是,在我看来,使用视图控制器在 Mac 上并不流行。像 NSWindowController 这样的窗口控制器怎么样?对于 iPhone 和 iPod touch 环境,它的对应物 UIWindowController 不存在,因为这些环境只有一个窗口。与视图控制器不同,NSWindowController 用于基于文档的程序。那么,基于文档的程序可以使用多个窗口。因此,正如 Apple 的文档所说,认为 NSWindowController 用于基于文档的程序是合理的。

于 2012-06-16T05:49:44.603 回答
5

我也来自 iOS,不久前开始编写 Mac 应用程序,主要从 Apple 的文档中学习。

我的印象是,在桌面上,您几乎不需要NSViewControllers(一个大的例外是带有选项卡和多个视图的窗口,例如 GarageBand 欢迎屏幕)。

大多数情况下,NSWindowController每个窗口都有一个。首先了解NSWindowNSWindowControllerNSDocument如果您正在制作基于文档的应用程序)之间的关系。

一旦你做对了,就开始尝试NSViewController.


更新:似乎自从为 mac 应用程序引入故事板以来,Apple 预计大部分视图呈现逻辑应该从旧的迁移NSWindowController到新的NSViewController,更符合 iOS 应用程序的结构。我不太了解在哪里画线,或者窗口控制器中应该保留什么样的代码(或者它是否仍然需要子类化)。

于 2012-06-16T07:05:27.107 回答
1

窗口控制器创建一个传统窗口并拥有所有传统 API。

视图控制器也可以显示在另一个视图之外。然后它获取一个窗口框架,但不支持完整的传统窗口控制器 API。

除了自定义、模式和显示之外,视图控制器还可以在模式表和弹出窗口中呈现。

因此,View Controller 具有更多的表示选项和更精简的 API,但在传统 Window Controller 涵盖的情况下可能存在一些限制。

于 2020-10-14T10:08:30.887 回答