ViewController上的自定义init方法,在viewDidLoad之前调用

时间:2013-06-28 13:33:10

标签: ios uiviewcontroller

我有一个自定义的容器视图控制器,我从故事板中实例化,并且有一堆方法可以修改我从故事板设置出口的子视图的内容。

有很多方法我可以实例化这个ViewController,目前我必须确保,但是我实例化它,我要么显示它,显式调用loadView,要么访问它{{1在我开始做任何使用其出口的事情之前的属性(因为它们都是空指针,直到调用.view)。

理想情况下,我想在loadView的单个初始化方法中调用loadView.view来解决此问题,而不是必须拨打电话在我从一起初始化ViewController的许多不同的地方到ViewController

.view类是否有指定的初始化程序?如果没有,我需要用自定义初始化逻辑修改哪些方法,以确保在我的ViewController初始化时调用它,无论如何?

2 个答案:

答案 0 :(得分:3)

awakeFromNib似乎是适合您目的的地方。来自文档:

  

在实例化过程中,存档中的每个对象都是   取消归档,然后使用适合其类型的方法进行初始化。   符合NSCoding协议的对象(包括所有   UIViewUIViewController的子类使用它们进行初始化   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中进行子视图操作。