我看到了这段代码:
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
?
答案 0 :(得分:5)
不,没有为在代码中创建的对象和从NIB创建的对象调用的方法。您应该编写一个包含公共初始化逻辑的单独方法,并从awakeFromNib
和initWithFrame:
中调用它。
答案 1 :(得分:2)
只要设置了XIB和NIB之间的所有连接,就会调用awakeFromNib
。我相信在从nib文件初始化对象时会调用awakeFromNib
。因此,如果您以编程方式而不是使用NIB文件创建它,则无需调用awakeFromNib
。另一方面,呼叫initWithFrame
听起来像是要走的路。在此功能中,您可以以编程方式创建视图,而无需nib文件。我可能是错的,但我认为initWithFrame
被调用,无论你的视图是否是用笔尖创建的。