2

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

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

我必须调用一个方法,setUpVars:但我不知道在哪里向该方法发送消息:

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

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

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

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

4

5 回答 5

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;
}
于 2013-03-12T09:53:25.843 回答
0

如果您使用 Interface Builder 来设计您的界面,initWithFrame: 当您的视图对象随后从 nib 文件加载时不会被调用。而是initWithCoder被调用。因此,如果您更喜欢通用方式,则可以在这两种方法中初始化变量。适用于两种情况

于 2013-03-12T09:23:46.247 回答
0

文档说

从笔尖醒来

从 Interface Builder 存档或 nib 文件加载接收器后,准备接收器进行服务。

- (void)awakeFromNib
{
 [self setUpVars];
}
于 2013-03-12T09:24:54.977 回答
0

我认为您需要从每个方法发送此消息,也不要忘记awakeFromNib方法。

您可以创建BOOL变量,例如isAlreadySetup并将其设置为YES方法setUpVars

于 2013-03-12T09:16:52.087 回答
-1

我倾向于认为您应该从负责的控制器的 -(void)viewDidLoad 方法中调用此方法

于 2013-03-12T09:21:16.903 回答