一个非常简单的解决方案是覆盖视图控制器的nibName
属性并返回对您要加载的视图进行编码的 nib 的名称:
- (NSString*) nibName
{
NSLog( @"p.s. this is the nib that the storyboard generated: %@", [super nibName]);
return @"MyViewController";
}
请注意,您可以访问故事板编译器生成的 nib 的名称,该名称将被使用。这个 nib 包含在 app bundle 中,打包在 storyboard.storyboardc 包中。
我有点惊讶您不能从此 nibName 实现中返回 nil 并获得加载程序使用文档中描述的规则搜索 nib 的默认行为。
或者(这是作弊)您可以通过带有键 nibName 的用户定义的运行时属性在 Storyboard 本身中为视图控制器设置所需的 nib 名称。这是有效的,因为该属性有一个未记录的设置器,所以实际上不要这样做!
我认为这是一个比公认答案更好的解决方案,因为视图将在视图控制器生命周期的正常过程中加载 - 也就是说,它将在控制器出现之前延迟加载,而不是在 init 方法中预先加载。而且代码更少。