我想为我的UIViewController子类实现一个自定义初始化方法来“替换”initWithNibName方法。
这是代码:
- (id) initWithMessage:(NSString *)message {
if ((self = [super initWithNibName:@"ToolTip" bundle:nil])) {
label.text = message;
}
return self;
}
标签是从xib加载的,但此时对标签的引用是nil(可能是因为xib尚未加载?)。有谁知道解决方案吗?感谢
答案 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”方法中释放标签。 希望这可以帮助。