2010-06-04 95 views
2

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

这是代码:(?可能是因为厦门国际银行是没有载入)

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

    return self; 
} 

该标签可从厦门国际银行加载,但在这一点上参考标签是零。有没有人知道这个解决方案?谢谢

回答

11

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

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”方法中的标签。 希望这有助于。