(可可)什么是UIViewController子类的单一窗口可可应用程序的相同呢?((Cocoa)

2019-07-28 22:09发布

与iOS应用乱搞后,我想我给一个可可应用程序一抡假设事情会非常相似。 所以我有一个拆分视图一个单一窗口的应用程序和一些NSTableView S(认为的iTunes)和我正在寻找把我的代码,将来自网络获取数据来填充表格的地方。

在iOS中我会把这个在viewDidLoad适当的方法UIViewController子类。 该UITableViewDataSource然后将访问该数据来填充它的细胞。

现在我有一个NSWindow的,我可以做类似的事情,但我怎么做一个NSWindowController呢? 这是连我想要什么? 我可以把它放在AppDelegate ,但看起来不正确。

Answer 1:

iOS和OS X之间的不同之处在于,只有一个窗口在iOS中,但有可能在OS X多个NSViewControllers比OS X工作方式不同UIViewControllers ,该NSViewController设计加载和处理的单一视图,而UIViewControllers (道歉我相对缺乏的iOS知识),似乎处理多个视图,并提供更多的观点之间的胶水。

即使是苹果的文档写的:

在Mac OS X,AppKit的视图控制器助理窗口控制器,这是最终为云在窗口一切负责。

因此,对口UIViewController在OS X不是NSViewController ,而是NSWindowController ,这确实提供为OS X的许多内容UIViewController通过管理个体窗口的整体和布局/内容/意见内相互作用确实为iOS 。

在你的情况,我会用一个NSWindowController -不过,如果应用程序是非常简单的App Delegate工作过; 如果应用程序是非常复杂的,然后用NSViewController分裂的代码不会是一个坏主意。

最好的方式做使用NSWindowController将使用编程方式加载它在App代表[[CustomWindowController alloc] init]

@implementation CustomWindowController
- (id)init
{
    self=[super initWithWindowNibName:@"CustomWindowNibName"];
    if(self)
    {
        //perform any initializations
    }
    return self;
}
@end

或致电

[[CustomWindowController alloc] initWithWindowNibName:@"CustomWindowNibName"];

直接(和覆盖initWithWindowNibName),如果你希望它是可重复使用的。

你可以删除MainMenu.xib默认窗口。


从根本上说,更多的,往往不是一个NSWindowController管理着自己的笔尖文件实例化一个窗口。 该NSWindowController通常拥有该笔尖文件。 (虽然它可能有它管理程序创建的窗口,这不是通常它是如何做。)

为了能够使用自定义NSWindowController ,因此你需要,让您在一个单独的榫/ XIB文件窗口将要管理。 (使用默认的厦门国际银行文件,意味着你允许可可自动实例化一个NSWindowController没有为子类的机会,你不能使用自定义NSWindowController使用默认NSMainNibFile对于一个简单的应用程序,只是把所有的控制器代码中的NSApplication /应用程序委托。)

在Xcode 4至少,该方法包括创建与所述窗口模板和自定义XIB NSWindowController类,实例化所述CustomWindowController基于在-init该笔尖类或其它地方,然后调用[CustomWindowController showWindow:self]; (或者,如果不工作, -makeKeyAndOrderFront:以获得实际显示窗口(中- (void)applicationDid/WillFinishLaunching:(NSNotification *)aNotification可能是一个不错的地方)。

要显示我刚刚删除它停止默认窗口。 有可能是一个更好的办法,但我不知道。



文章来源: (Cocoa) What's the equivalent of a UIViewController subclass in a single window cocoa app?