UIVIewController 自定义初始化方法

Posted

技术标签:

【中文标题】UIVIewController 自定义初始化方法【英文标题】:UIVIewController custom init method 【发布时间】: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 尚未加载?)。有谁知道解决方案?谢谢

【问题讨论】:

【参考方案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”方法中释放标签。 希望这可以帮助。

【讨论】:

以上是关于UIVIewController 自定义初始化方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在通用 UIViewController 之后设置自定义 UIViewController?

重构大方法以在 UIViewController 中创建自定义 UIView

didFinishLaunchingWithOptions方法,该方法仅创建自定义UIViewController

访问 UIViewController 中的自定义 UINavigationController 属性和方法

iOS,视图控制器相关(UIViewController)

从 UIViewController 调用自定义 UINavigationController 中的方法时目标错误