Boo*_*ker 2 storyboard xib uiviewcontroller nib ios

我有一个带有StoryBoard(iOS 5+)的项目,带有两个UIViewController.
任务是以编程方式实例化第二个UIViewController(CoordinationController),但我想将它的XIB文件用于用户界面设计.
将XIB复制到StoryBoard的明显解决方法是无效或无法用于未记录的原因.即使是规则也是如果第二个故事板的视图控制器没有视图,它将查找相同的命名XIB ...不起作用.
如何实例化第二个UIViewController并使用其XIB文件?
您可以加载nib文件并在CoordinationController的initWithCoder:方法中设置视图:
-(id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
UINib *nib = [UINib nibWithNibName:@"CoordinationController" bundle:nil];
NSArray *nibObjects = [nib instantiateWithOwner:self options:nil];
self.view = nibObjects.lastObject;
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
一个非常简单的解决方案是覆盖视图控制器的nibName属性并返回编码要加载的视图的nib的名称:
- (NSString*) nibName
{
NSLog( @"p.s. this is the nib that the storyboard generated: %@", [super nibName]);
return @"MyViewController";
}
Run Code Online (Sandbox Code Playgroud)
请注意,您可以访问故事板编译器生成的nib的名称,该名称将被使用.此笔尖包含在应用程序包中,打包在storyboard.storyboardc包中.
我有点惊讶你不能从这个nibName实现返回nil并获得默认行为,其中加载器使用文档中描述的规则搜索nib .
或者(这是作弊)您可以通过具有键nibName的用户定义的运行时属性为视图控制器在Storyboard本身中设置所需的nib名称.这是有效的,因为该属性有一个未记录的setter,所以实际上不要这样做!
我认为这是一个比接受的答案更好的解决方案,因为视图将在视图控制器的生命周期的正常过程中加载 - 也就是说,它将在控制器呈现之前延迟加载,并在init方法中预先显示.而且代码更少.
| 归档时间: |
|
| 查看次数: |
2215 次 |
| 最近记录: |