Ios 带有自定义初始化的自定义UIView不';行不通
我正在用最新的SDK开发一个iOS应用程序 我创建了一个继承自Ios 带有自定义初始化的自定义UIView不';行不通,ios,objective-c,uiview,Ios,Objective C,Uiview,我正在用最新的SDK开发一个iOS应用程序 我创建了一个继承自UIView的类,每次实例化该类时,我都必须进行一些初始化 我必须调用名为setUpVars:的方法,但我不知道向该方法发送消息的位置: - (id)initWithFrame:(CGRect)frame; - (id)initWithCoder:(NSCoder*)aDecoder; 这个类可以与自定义xib一起使用,也可以添加到故事板中,所以我需要确保在任何情况下都会调用该方法 - (void)setUpVars { _
UIView
的类,每次实例化该类时,我都必须进行一些初始化
我必须调用名为setUpVars:
的方法,但我不知道向该方法发送消息的位置:
- (id)initWithFrame:(CGRect)frame;
- (id)initWithCoder:(NSCoder*)aDecoder;
这个类可以与自定义xib一起使用,也可以添加到故事板中,所以我需要确保在任何情况下都会调用该方法
- (void)setUpVars
{
_preferenceKey = @"";
_preferenceStatus = NO;
_isDown = NO;
}
我必须在哪里添加
[self-setUpVars]
?我认为您需要从每个方法发送此消息,也不要忘记awakeFromNib
方法
您可以创建
BOOL
变量,类似于isAlreadySetup
并在setUpVars
方法中将其设置为YES
。如果您使用Interface Builder设计界面,我倾向于认为您应该从负责的控制器的-(void)viewDidLoad方法调用此方法,initWithFrame
:在随后从nib文件加载视图对象时不调用。而是调用initWithCoder
。因此,如果您喜欢通用方法,您可以用这两种方法初始化变量。在这两种情况下都有效
awakeFromNib
在从服务器加载接收器后,为其准备服务
接口生成器存档或nib文件
基本上,您将希望涵盖这两种情况
- (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;
}
能否显示setUpVars方法?@pdrcabrod Question updated.viewDidLoad是处理子视图的正确位置,因为您知道调用它时,interface builder定义的所有视图都已正确加载。此外,变量管理是在控制器上而不是在视图上进行的。这些变量正确或错误地是视图的内部状态,而不是视图控制器,viewController为视图的状态设置默认值是没有意义的,这将导致非常脆弱的设计初始化应该在对象本身的init方法中完成。UIView子类不应该依赖外部类(包括所有者)来正确初始化它
viewDidLoad
是设置与初始化默认值不同的任何属性(如果它们是属性)的理想场所。只是不要忘记init:
。墨菲说它可以被调用,因此它将被调用。@HermannKlecker asinitWithFrame:
是指定的初始值设定项init
通常会被覆盖以调用它,这是一个快速测试显示的。
- (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;
}