[英]Custom UIView with custom initialization doesn't work
我正在使用最新的SDK開發iOS應用。
我創建了一個從UIView
繼承的類,每次實例化該類時都必須進行一些初始化。
我必須調用一個名為setUpVars:
的方法setUpVars:
但是我不知道將消息發送到該方法的位置:
- (id)initWithFrame:(CGRect)frame;
- (id)initWithCoder:(NSCoder*)aDecoder;
此類可以與自定義xib一起使用,也可以添加到Storyboard中,因此我需要確保在每種情況下都將調用該方法。
- (void)setUpVars
{
_preferenceKey = @"";
_preferenceStatus = NO;
_isDown = NO;
}
我必須在哪里添加[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;
}
我認為您需要從每個方法發送此消息,也不要忘記awakeFromNib
方法。
您可以創建BOOL
變量(類似於isAlreadySetup
,然后在setUpVars
方法中將其設置為YES
。
如果使用Interface Builder設計界面,則隨后從nib文件加載視圖對象時,不會調用initWithFrame
而是調用initWithCoder
。 因此,如果您喜歡通用方法,則可以在兩種方法中初始化變量。 在兩種情況下均有效
Docs說
awakeFromNib
從Interface Builder檔案或nib文件中加載接收器后,為接收器做准備。
- (void)awakeFromNib
{
[self setUpVars];
}
我傾向於認為您應該從負責控制器的-(void)viewDidLoad方法調用此方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.