1. 程式人生 > >[iOS Xib載入/封裝] xib載入以後無法賦值Laber屬性的值

[iOS Xib載入/封裝] xib載入以後無法賦值Laber屬性的值

今天用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方法 則需要在建立好物件以後,賦值過程已經結束