【问题标题】:UIVIewController custom init methodUIVIewController 自定义初始化方法
【发布时间】:2010-06-04 10:40:21
【问题描述】:
我想为我的 UIViewController 子类实现一个自定义初始化方法来“替换”initWithNibName 方法。
这是代码:
- (id) initWithMessage:(NSString *)message {
if ((self = [super initWithNibName:@"ToolTip" bundle:nil])) {
label.text = message;
}
return self;
}
标签是从 xib 加载的,但此时对标签的引用为零(可能是因为 xib 尚未加载?)。有谁知道解决方案?谢谢
【问题讨论】:
标签:
iphone
objective-c
uiviewcontroller
【解决方案1】:
我知道这是一个老问题,但正确的答案是在视图加载后使用viewDidLoad 方法进行任何其他设置。视图在需要时才会加载,并且在收到内存警告时可能会被卸载。因此,不应在 init 方法中触及视图控制器的视图。
【解决方案2】:
您应该以编程方式声明标签并在 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”方法中释放标签。
希望这可以帮助。