我正在使用最新的SDK开发iOS应用程序。
我创建了一个继承自UIView
的类,每次实例化类时都必须进行一些初始化。
我必须调用一个名为setUpVars:
的方法,但我不知道将消息发送到该方法的位置:
- (id)initWithFrame:(CGRect)frame;
- (id)initWithCoder:(NSCoder*)aDecoder;
此类可以与自定义xib一起使用,也可以添加到Storyboard中,因此我需要确保在每种情况下都会调用该方法。
- (void)setUpVars
{
_preferenceKey = @"";
_preferenceStatus = NO;
_isDown = NO;
}
我必须在哪里添加[self setUpVars];
?
答案 0 :(得分:2)
基本上你会想要涵盖这两种情况
- (id)initWithFrame:(CGRect)frame;
{
self = [super initWithFrame:frame];
if (self) {
[self setUpVars];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder;
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setUpVars];
}
return self;
}
答案 1 :(得分:0)
我认为您需要从每个方法发送此消息,也不要忘记awakeFromNib
方法。
您可以创建BOOL
变量,例如isAlreadySetup
,并在YES
方法中将其设置为setUpVars
。
答案 2 :(得分:0)
如果使用Interface Builder设计界面,则随后从nib文件加载视图对象时不会调用initWithFrame
:.相反,initWithCoder
被调用。因此,如果您更喜欢通用方法,则可以在两种方法中初始化变量。适用于两种情况
答案 3 :(得分:0)
文件说
<强> awakeFromNib 强>
从接收器加载后准备接收器以进行维修 Interface Builder存档或nib文件。
- (void)awakeFromNib
{
[self setUpVars];
}
答案 4 :(得分:-1)
我倾向于认为你应该从负责控制器的 - (void)viewDidLoad方法调用这个方法