iOS 和 OS X 之间的区别在于 iOS 中只有一个窗口,但 OS X 中可以有多个窗口NSViewControllers
。iOS 知识)似乎可以处理多个视图并在视图之间提供更多的粘合剂。UIViewControllers
NSViewController
UIViewControllers
甚至Apple 文档也这样写道:
在 Mac OS X 中,AppKit 视图控制器是窗口控制器的助手,它最终负责窗口中的所有内容。
因此,UIViewController
OS X 中的对应物不是NSViewController
,而是NSWindowController
,它UIViewController
通过管理单个窗口的整体以及其中视图的布局/内容/交互,为 OS X 提供了许多为 iOS 提供的功能。
在你的情况下,我会使用NSWindowController
- 虽然如果应用程序非常简单,那么App Delegate
也可以;如果应用程序非常复杂,那么使用 aNSViewController
来拆分代码不会是一个坏主意。
使用 an 的最佳方法是以NSWindowController
编程方式将其加载到 App Delegate 中,使用[[CustomWindowController alloc] init]
and
@implementation CustomWindowController
- (id)init
{
self=[super initWithWindowNibName:@"CustomWindowNibName"];
if(self)
{
//perform any initializations
}
return self;
}
@end
或者打电话
[[CustomWindowController alloc] initWithWindowNibName:@"CustomWindowNibName"];
如果您希望它可重用,则直接(并覆盖 initWithWindowNibName)。
您可以删除 MainMenu.xib 中的默认窗口。
从根本上说,一个 NSWindowController 管理一个在它自己的 nib 文件中实例化的窗口。NSWindowController 通常拥有那个 nib 文件。(虽然可以让它管理一个以编程方式创建的窗口,但这通常不是这样做的。)
因此,为了能够使用 custom NSWindowController
,您需要在单独的 nib/xib 文件中创建要管理的窗口。(使用默认的 xib 文件意味着您允许 Cocoa 自动实例化一个 NSWindowController 而没有机会进行子类化;您不能使用NSWindowController
带有默认 NSMainNibFile 的自定义。对于一个简单的应用程序,只需将所有控制器代码放在 NSApplication/App Delegate 中)
至少在 Xcode 4 中,该过程涉及使用窗口模板和自定义类创建一个 xib,在 -init 或任何地方基于该 nibNSWindowController
实例化该类,然后调用(或者如果这不起作用,)来获取窗口实际展示(可能是一个不错的地方)。CustomWindowController
[CustomWindowController showWindow:self];
-makeKeyAndOrderFront:
- (void)applicationDid/WillFinishLaunching:(NSNotification *)aNotification
要停止显示默认窗口,我只需将其删除。可能有更好的方法,但我不知道。