使用自定义初始化的自定义UIView不起作用

时间:2013-03-12 09:12:08

标签: ios objective-c uiview

我正在使用最新的SDK开发iOS应用程序。

我创建了一个继承自UIView的类,每次实例化类时都必须进行一些初始化。

我必须调用一个名为setUpVars:的方法,但我不知道将消息发送到该方法的位置:

- (id)initWithFrame:(CGRect)frame;
- (id)initWithCoder:(NSCoder*)aDecoder;

此类可以与自定义xib一起使用,也可以添加到Storyboard中,因此我需要确保在每种情况下都会调用该方法。

- (void)setUpVars
{
    _preferenceKey = @"";
    _preferenceStatus = NO;
    _isDown = NO;
}

我必须在哪里添加[self setUpVars];

5 个答案:

答案 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方法调用这个方法