[iOS Xib加载/封装] xib加载以后无法赋值Laber属性的值

来源:互联网 发布:三维彩超上数据看男女 编辑:程序博客网 时间:2024/06/01 09:42

参考: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方法 则需要在创建好对象以后,赋值过程已经结束

0 0