[iOS Xib載入/封裝] xib載入以後無法賦值Laber屬性的值
阿新 • • 發佈:2019-01-27
今天用xib封裝一個view,已達到特定的需求, 然後發現 一開始的方法無法在載入xib之後對其中的Laber賦值,
錯誤❌ 的方式:
重寫了init方法,使用alloc方法來建立這個自定義view的物件
-(void)setMallName:(NSString *)mallName{
_mallName = mallName;
}
- (instancetype)initWithFrame:(CGRect)frame titleName:(NSString*)name{
self = [super initWithFrame:frame];
if (self ) {
self.mallName = name;
[self baseInit];
}
return self;
}
-(void)baseInit{
NSArray *arr = [[NSBundle mainBundle] loadNibNamed:@"JFcustomHeadView" owner:self options:nil];
UIView *view = nil;
for (id obj in arr) {
if ([obj isKindOfClass:[UIView class]]) {
view = obj;
break ;
}
}
if (view != nil) {
_mallNameLab.text = _mallName;
[self addSubview:view];
}
}
以上方法無法賦值
✅正確的方法如下
始終類方法建立,方可賦值
+(instancetype)viewWithTitlaName:(NSString*)name{
NSArray *arr = [[NSBundle mainBundle] loadNibNamed:@"JFcustomHeadView" owner:self options:nil ];
JFcustomHeadView *jfView = [arr lastObject];
jfView.mallName = name;
return jfView;
}
-(void)setMallName:(NSString *)mallName{
_mallName = mallName;
_mallNameLab.text = _mallName;
}
賦值的時機,使用類方法的好處就是,可以在類裡面建立好物件,並直接賦值,而之前的init方法 則需要在建立好物件以後,賦值過程已經結束