【问题标题】:UIKit: call awakeFromNib programmatically?UIKit:以编程方式调用 awakeFromNib?
【发布时间】:2011-06-22 20:58:32
【问题描述】:

我看到了这段代码:

CoolButton *coolButton = [[CoolButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 60.0f, 25.0f)];
[coolButton awakeFromNib];
// ...
[coolButton release];

CoolButton 子类UIButton。以编程方式调用awakeFromNib 可以吗?

如果我想做与-[CoolButton awakeFromNib] 中相同的事情,我想以编程方式而不是从 nib 文件创建对象,那么最好的方法是什么?

我应该只定义一个方法并在-[CoolButton awakeFromNib]-[CoolButton initWithFrame] 中调用它吗?或者,我应该定义另一种在两种情况下都会调用的初始化方法:我是通过编程方式还是从 nib 文件创建 CoolButton

【问题讨论】:

    标签: ios uikit nib awakefromnib


    【解决方案1】:

    不,没有一种方法可以同时为在代码中创建的对象和从 NIB 创建的对象调用。您应该编写一个包含通用初始化逻辑的单独方法,并从awakeFromNibinitWithFrame: 调用它。

    【讨论】:

    • initWithCoder: 怎么样?根据文档,从 nib 文件加载 UIView 子类时会调用它。 initWithFrame: 是否调用 -initWithCoder:?如果是这样,那我可以实现-initWithCoder:吗?
    【解决方案2】:

    只要设置了 XIB 和 NIB 之间的所有连接,就会调用 awakeFromNib。我相信 awakeFromNib 在从 nib 文件初始化时在对象上调用。因此,如果您以编程方式而不是使用 NIB 文件创建它,则无需调用 awakeFromNib。另一方面,致电initWithFrame 听起来像是要走的路。在此函数中,您可以通过编程方式创建视图,而无需 nib 文件。我可能是错的,但我认为initWithFrame 被调用,无论您的视图是否是用笔尖创建的。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2016-08-01
    相关资源
    最近更新 更多