参考:iOS - xib史上最全说明
今天用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方法 则需要在创建好对象以后,赋值过程已经结束