将 NSViewController 与自定义视图一起使用

Use NSViewController with Custom View

我有一个主 .xib 视图,其中的一部分由自定义视图组成。同时,我还创建了单独的 .xib 子视图(连同它们各自的 .h 和 .m 文件)。然后将这些自定义 classes 连接到主 .xib

中的自定义视图

此设置工作正常,但我希望有多个 NSViewController(s) 控制每个不同的自定义视图。推荐的方法是什么?

例如。 Main.xib > 包含 'custom views' > 每个都使用 NSView 自定义 class 并在其自己的 .xib 中设计

NSViewController class 会响应这些自定义视图之一中发生的事件,而不是绑定到 Main.xib

的 NSViewController

我倾向于做的只是创建一个新的 NSViewController 子类并选择 'Create XIB' 选项。

从那里,我实例化视图控制器子类并在代码中将其添加到视图层次结构中。

这并没有完全按照您的建议进行,但确实使事情更加模块化/更易于测试。缺点是在父子之间设置约束具有挑战性。我也倾向于手动执行此操作,或者将子控制器的视图添加到 NSStackView 中,这会给您一些限制。

可能有更好的方法,但这是我们在 multi-xib 项目中使用的方法。

我最终使用 XIB 文件创建了 NSViewControllers 而不是我以前的自定义视图。

然后我为我拥有的每个自定义视图创建了 NSBox 组件。我通过 IBOutlet(s) 将它们中的每一个连接到主 NSViewController。

最后,我通过 IBOutlets 将每个自定义视图附加到专用的 NSBox,如下所示:

- (void) awakeFromNib{
   [super awakeFromNib];


    //instantiate custom view controller
   CustomViewController* customViewController = [[CustomViewController alloc] initWithNibName:@"CustomViewController"
                                                  bundle:nil];
   [self.customNSBoxView setContentView:[customViewController view]];
}