UIVIewController自定义init方法

时间:2010-06-04 10:40:22

标签: iphone objective-c uiviewcontroller

我想为我的UIViewController子类实现一个自定义初始化方法来“替换”initWithNibName方法。

这是代码:

- (id) initWithMessage:(NSString *)message {
    if ((self = [super initWithNibName:@"ToolTip" bundle:nil])) {
        label.text = message;
    }

    return self;
}

标签是从xib加载的,但此时对标签的引用是nil(可能是因为xib尚未加载?)。有谁知道解决方案吗?感谢

2 个答案:

答案 0 :(得分:12)

我知道这是一个老问题,但正确的答案是在加载视图后使用viewDidLoad方法进行任何其他设置。视图在需要之前不会加载,并且可以在收到内存警告时卸载。因此,不应在init方法中触及视图控制器的视图。

答案 1 :(得分:1)

您应该以编程方式声明标签并在init中初始化它,而不是从nib中执行。

这是:

假设UILabel *label是一个为其定义@property@synthesize的类变量。

- (id) initWithMessage:(NSString *)message {

    if ((self = [super initWithNibName:@"ToolTip" bundle:nil])) {
        label = [[UILabel alloc] init];
        label.text = message;
        [self.view addSubView:label];
    }

    return self;
}

在“dealloc”方法中释放标签。 希望这可以帮助。