我有一个自定义的容器视图控制器,我从故事板中实例化,并且有一堆方法可以修改我从故事板设置出口的子视图的内容。
有很多方法我可以实例化这个ViewController,目前我必须确保,但是我实例化它,我要么显示它,显式调用loadView
,要么访问它{{1在我开始做任何使用其出口的事情之前的属性(因为它们都是空指针,直到调用.view
)。
理想情况下,我想在loadView
的单个初始化方法中调用loadView
或.view
来解决此问题,而不是必须拨打电话在我从一起初始化ViewController的许多不同的地方到ViewController
。
.view
类是否有指定的初始化程序?如果没有,我需要用自定义初始化逻辑修改哪些方法,以确保在我的ViewController初始化时调用它,无论如何?
答案 0 :(得分:3)
awakeFromNib
似乎是适合您目的的地方。来自文档:
在实例化过程中,存档中的每个对象都是 取消归档,然后使用适合其类型的方法进行初始化。 符合
NSCoding
协议的对象(包括所有UIView
和UIViewController
的子类使用它们进行初始化initWithCoder:
方法。
...
毕竟对象 已经实例化并初始化了nib加载代码 重新建立所有这些的出口和行动连接 对象。然后它调用对象的awakeFromNib
方法。
答案 1 :(得分:-1)
您可以覆盖这些以涵盖初始化案例:
- (id) initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if(self)
{
[self customInit];
}
return self;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
[self customInit];
}
return self;
}
- (id)init
{
self = [super init];
if (self) {
[self customInit];
}
return self;
}
- (void) customInit
{
//custom init code
}
然而,这不是一个好习惯,你应该在viewDidLoad中进行子视图操作。