macos - Mac OS X cocoa : Create NCViewController with View

标签 macos cocoa interface-builder nsviewcontroller

我对 iOS 相当有经验,但对 MacOS X Cocoa 还很陌生。

我正在使用 InterfaceBuilder 创建 View 层次结构。这与 MainMenu NIB 是分开的。

我还在创建一个 NSViewController。由于 Mac OS X 的工作方式,此 Controller 对象不直接附加到 View 层次结构。

我连接了 IB 中的所有不同导出,使 View 层次结构成为 View Controller 的 View 对象,并附加了一些包含的控件等等。

现在,问题来了:在 iOS 中,我只是从 Storyboard实例化 Controller ,整个套件和 kaboodle 都随之而来。没有大惊小怪,没有困惑。

在 Mac OS X 中,我可以创建 View Controller :

MyAwesomeViewControllerClass *pViewController = [[MyAwesomeViewControllerClass alloc] initWithNibName:nil bundle:nil];

我找不到与 iOS 中的 instantiateViewControllerWithIdentifier: 方法类似的 Mac OS X。这确实是我所需要的。

如果我需要单独实例化它们,我需要弄清楚如何做到这一点。

我不想以编程方式执行此操作。其中涉及到很多自动布局的东西,这是一大堆(而且很精致)的意大利面条。

很可能,我会犯这个错误,并且想花五美元购买一条线索,亚历克斯......

最佳答案

您需要将 NIB 的名称传递给 initWithNibName:bundle::

MyAwesomeViewControllerClass *pViewController = [[MyAwesomeViewControllerClass alloc]
    initWithNibName:@"MyAwesomeViewControllerClass"
             bundle:nil];

我通常会覆盖init:

- (instancetype)init {
    // NOTE: Not [self initWithNibName:bundle:] !!!
    self = [super initWithNibName:@"MyAwesomeViewControllerClass" bundle:nil];
    if (self) {
        // Other init
    }
    return self;
}

然后:

MyAwesomeViewControllerClass *pViewController =
    [[MyAwesomeViewControllerClass alloc] init];

更容易键入,并且不需要 View Controller 的用户知道正在使用的 NIB(即使它很明显)。

关于macos - Mac OS X cocoa : Create NCViewController with View,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23389121/

相关文章:

cocoa - 带有建议下拉菜单的 NSTextField

objective-c - Objective-C中的合成属性是否自动触发didChangeObjectForKey :?

sqlite - 如何在不使用 -wal 和 -shm 的情况下将 MOC 的内容保存到文件中?

swift - 以编程方式将 InterfaceBuilder 创建的 View 添加到 NSStackView 会将它们压缩到 0 高度

objective-c - NSTextField 的子类化

html - getContext ('2d' ) 在 Safari 10 中返回 null

python - 无法在 Mac OSX 上找到 pip 安装的 python 模块的可执行文件

cocoa - NSScrollView 中的自动布局约束

swift - NSDocumentController.openDocument 不允许选择自定义文件类型

cocoa - 将 NSTextField 绑定(bind)到 NSNumber