2

我看到了这段代码:

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

CoolButton子类UIButtonawakeFromNib以编程方式调用可以吗?

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

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

4

2 回答 2

6

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

于 2011-06-22T21:10:47.450 回答
2

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

于 2011-06-22T21:10:30.910 回答