Mac OS X Cocoa:使用View创建NSViewController

时间:2014-04-30 13:14:12

标签: macos cocoa interface-builder nsviewcontroller

我对iOS很有经验,但对MacOS X Cocoa来说仍然非常环保。

我正在使用InterfaceBuilder来创建视图层次结构。这与MainMenu NIB分开。

我也在创建一个NSViewController。由于Mac OS X的工作方式,此控制器对象不直接附加到视图层次结构。

我连接IB中的所有各个出口,使视图层次结构成为视图控制器的视图对象,并附加一些包含的控件等等。

现在,问题出在这里:在iOS中,我只是从故事板中实例化控制器,整个套件和kaboodle随之而来。没有大惊小怪,没有麻烦。

在Mac OS X中,我可以创建视图控制器:

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

我找不到iOS OS中的instantiateViewControllerWithIdentifier:方法的Mac OS X模拟。这才是我真正需要的。

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

我不想以编程方式执行此操作。有很多自动布局的东西,这是一个实质性的(和精致的)意大利面条。

最有可能的是,我正在解决这个问题,并想购买五块钱的线索,Alex ......

1 个答案:

答案 0 :(得分:1)

您需要将调用的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];

更容易输入,并且不要求视图控制器的用户知道正在使用的NIB(即使很明显)。