自定义初始化自定义UIView不起作用
我正在开发一个iOS应用程序与最新的SDK。自定义初始化自定义UIView不起作用
我已经创建了一个继承自UIView
的类,每次类实例化时我都必须进行一些初始化。
我要调用一个名为setUpVars:
方法,但我不知道从哪里发送消息给该方法:
- (id)initWithFrame:(CGRect)frame;
- (id)initWithCoder:(NSCoder*)aDecoder;
这个类可以用自定义的厦门国际银行中,或者加入到故事板,所以我需要确保在每种情况下都会调用该方法。
- (void)setUpVars
{
_preferenceKey = @"";
_preferenceStatus = NO;
_isDown = NO;
}
在哪里我要补充[self setUpVars];
?
我觉得你需要从每个方法发送这个消息,也不要忘记awakeFromNib
方法。
您可以创建BOOL
变量,如isAlreadySetup
,并将其设置为YES
,setUpVars
方法。
@VansFannel,如果回答解决你的问题你能接受吗? – zakhej 2013-03-27 08:27:00
我倾向于认为你应该打电话从这个方法 - (无效)viewDidLoad中负责控制的方法
viewDidLoad是视图控制器方法..不是视图的!!! – 2013-03-12 09:26:16
viewDidLoad是在子视图上执行工作的正确位置,因为您知道,何时调用由界面构建器定义的所有视图都没有正确加载。此外,可变管理将在不是视图的控制器上完成。 – 2013-03-12 09:40:10
这些变量正确或错误地是视图的内部状态而不是viewControllers,viewController为视图的状态设置默认值并且会导致非常脆弱的设计没有意义 – 2013-03-12 09:51:12
如果您使用Interface Builder来设计自己的界面,initWithFrame
:当您的视图对象不叫随后从nib文件加载。而是调用initWithCoder
。所以如果你喜欢通用的方式,你可以在两种方法中初始化你的变量。工作在两种情况下
文档说
awakeFromNib
准备服务接收器已经从 Interface Builder的存档或笔尖文件加载后。
- (void)awakeFromNib
{
[self setUpVars];
}
基本上你会希望涵盖这两种情况下
- (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;
}
只是不要忘记'init:'。墨菲说,它可以被称为,因此它会被称为。 – 2013-03-12 10:30:20
@HermannKlecker as'initWithFrame:'是指定的初始化工具'init'通常会被覆盖以调用它,这是一个快速测试。 – 2013-03-12 10:38:20
可以显示setUpVars方法? – pdrcabrod 2013-03-12 09:15:30
@pdrcabrod问题已更新。 – VansFannel 2013-03-12 09:16:24