UI基础-day04-Shopping-08Xib-06Xib使用注意

UI基础-day02-Shopping-01搭建商城基本框架
UI基础-day02-Shopping-02添加一个商品
UI基础-day02-Shopping-03九宫格排序
UI基础-day02-Shopping-04优化添加和删除功能
UI基础-day02-Shopping-05加载数据
UI基础-day02-Shopping-06懒加载-1基础
UI基础-day03-Shopping-06懒加载-2Plist文件读取
UI基础-day03-Shopping-06懒加载-3字典转模型
UI基础-day04-Shopping-07自定义控件-01设置子控件的frame
UI基础-day04-Shopping-07自定义控件-02加载数据
UI基础-day04-Shopping-07自定义控件-03初始化和类方法
UI基础-day04-Shopping-08Xib-01基本使用
UI基础-day04-Shopping-08Xib-02简单的加载数据
UI基础-day04-Shopping-08Xib-03Tag值方式加载数据
UI基础-day04-Shopping-08Xib-04自定义Xib控件
UI基础-day04-Shopping-08Xib-05自定义Xib控件-优化

分析

-initWithFrame:

  • 通过代码方式创建的控件,初始化时一定调用initWithFrame方法
-(instancetype)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {
    ......
    }
    return self;
}

通过alloc/init或者alloc/initWithFrame创建控件不会主动加载xib,即使xib的名称和控件的类名一样!(它只是创建了一个普通类而已)

HUHShopView *shopV = [[HUHShopView alloc] init];

当然,如果想要在使用alloc/init时候,强制加载xib也行!其实是没必要,直接使用-initWithCoder:方法即可.

-(instancetype)initWithFrame:(CGRect)frame{
    HUHShopView *shopV;
    if (self = [super initWithFrame:frame]) {
        NSLog(@"你来了...");
        shopV = [[[NSBundle mainBundle]loadNibNamed:@"HUHShopView" owner:nil options:nil]firstObject];
    }
    return shopV;
}

-initWithCoder:

  • 通过xib或者storyboard创建控件,初始化时
    不会调用initWithFrame方法
    调用的是initWithCoder方法
  • initWithCoder属于正在初始化阶段,属性是没有值得.
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
    if(self = [super initWithCoder:aDecoder]){
    ......
    }
    return self;
}

-awakeFromNib

  • 通过xib或者storyboard创建控件, 初始化完成后,
    调用的是awakeFromNib方法
  • awakeFromNib是初始化完成后调用,属性已经有值.
-(void)awakeFromNib{
  [super awakeFromNib];
    ...
}

问题: 如果说,需要对xib控件做初始化设置,选择哪个方法呢?
答: -initWithCoder:-awakeFromNib都可以.
但是,如果是对当前控件的属性的操作,最好选择-awakeFromNib.因为, -initWithCoder:是正在初始化,当前属性还没有赋值.

如: 给当前控件本身设置大小,背景?

-(instancetype)initWithCoder:(NSCoder *)aDecoder{
    if(self = [super initWithCoder:aDecoder]){
        //对当前View本身进行操作是有效得.
        self.backgroundColor = [UIColor cyanColor];
        self.frame = CGRectMake(0, 0, 180, 200);
        //对当前View属性的操作是没有效果得.
        //self.ImgView.backgroundColor =[UIColor cyanColor];
    }
    return self;
}

如: 通过代码的方式,在xib初始化时,设置控件的属性值?

@property (weak, nonatomic) IBOutlet UIImageView *ImgView;
@property (weak, nonatomic) IBOutlet UILabel *lblTemp;
...
-(void)awakeFromNib{
    [super awakeFromNib];
    [self.ImgView setImage:[UIImage imageNamed:@"qianbao"]];
    self.lblTemp.text =@"qianbaolaiya";
}
效果图

你可能感兴趣的:(UI基础-day04-Shopping-08Xib-06Xib使用注意)