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
具有您要检查的三个属性:nibBundle
、nibName
和 storyboard
。所有这三个属性都是可选的,它们是在调用 loadView
之前设置的。
loadView
的默认实现检查是否设置了这些属性。如果是这样,它将从该笔尖或情节提要中初始化视图。否则,它会创建一个空的 NSView
.
在 loadView
的实施中,您也需要检查这些值。如果 nibName
和 storyboard
都是 nil
,您可以按照自己的喜好创建和设置视图。
override func loadView() {
guard nibName == nil, storyboard == nil else {
super.loadView()
return
}
view = MyCustomView()
}
我正在向库中添加一个 NSViewController
子类,并尝试吃我的蛋糕。
The default implementation of MyViewController() ( Or init() ) throws an exception
如果它无法在笔尖或故事板中找到自己。为了克服这个问题,我必须 override loadView()
并在代码中创建和分配一个视图。我真正想做的是两者兼而有之,在代码中创建一个视图,但只有在 super 的实现在 nib 中找不到的情况下才使用该代码 运行。我尝试了一个
do {
super.loadView()
}
catch{
//viewCreatingCode
}
但不幸的是 loadView 没有被标记为抛出,所以 catch 不起作用。有什么想法吗?
好的,这就是你想要做的。
NSViewController
具有您要检查的三个属性:nibBundle
、nibName
和 storyboard
。所有这三个属性都是可选的,它们是在调用 loadView
之前设置的。
loadView
的默认实现检查是否设置了这些属性。如果是这样,它将从该笔尖或情节提要中初始化视图。否则,它会创建一个空的 NSView
.
在 loadView
的实施中,您也需要检查这些值。如果 nibName
和 storyboard
都是 nil
,您可以按照自己的喜好创建和设置视图。
override func loadView() {
guard nibName == nil, storyboard == nil else {
super.loadView()
return
}
view = MyCustomView()
}