1

我有一个自定义容器视图控制器,我从情节提要中实例化它,它有一堆方法可以修改我从情节提要中设置出口的子视图的内容。

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

理想情况下,我想调用loadView或调用.view我的单个初始化方法ViewController来解决这个问题,而不是不得不将调用放在.view我初始化 ViewController 的一堆不同的地方。

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

4

2 回答 2

3

awakeFromNib似乎是适合您目的的地方。从文档中:

在实例化过程中,存档中的每个对象都被取消存档,然后使用适合其类型的方法进行初始化。符合NSCoding协议的对象(包括 和 的所有子类UIViewUIViewController使用它们的 initWithCoder:方法进行初始化。
...
在所有对象都被实例化和初始化之后,nib 加载代码为所有这些对象重新建立出口和操作连接。然后它调用awakeFromNib对象的方法。

于 2013-06-28T14:31:11.990 回答
-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 中进行子视图操作。

于 2013-06-28T13:44:05.920 回答