NSViewController with/without 笔尖

NSViewController with/without nib

我正在向库中添加一个 NSViewController 子类,并尝试吃我的蛋糕。

The default implementation of MyViewController() ( Or init() ) throws an exception

如果它无法在笔尖或故事板中找到自己。为了克服这个问题,我必须 override loadView() 并在代码中创建和分配一个视图。我真正想做的是两者兼而有之,在代码中创建一个视图,但只有在 super 的实现在 nib 中找不到的情况下才使用该代码 运行。我尝试了一个

    do  {
        super.loadView()
        }
    catch{
        //viewCreatingCode
        } 

但不幸的是 loadView 没有被标记为抛出,所以 catch 不起作用。有什么想法吗?

好的,这就是你想要做的。

NSViewController 具有您要检查的三个属性:nibBundlenibNamestoryboard。所有这三个属性都是可选的,它们是在调用 loadView 之前设置的。

loadView 的默认实现检查是否设置了这些属性。如果是这样,它将从该笔尖或情节提要中初始化视图。否则,它会创建一个空的 NSView.

loadView 的实施中,您也需要检查这些值。如果 nibNamestoryboard 都是 nil,您可以按照自己的喜好创建和设置视图。

override func loadView() {
    guard nibName == nil, storyboard == nil else {
        super.loadView()
        return
    }
    view = MyCustomView()
}