UI基础-day04-Shopping-07自定义控件-03初始化和类方法

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加载数据

分析

  1. Apple系统方法里面,一个类一般都包含初始化方法和类方法.
    好处:
    1.一种约定俗称的规范方.
    2.初始化时,就把需要的数据加载好.

初始化和类方法

@interface HUHShopView : UIView
@property (nonatomic, strong) HUHShopModel *shop;
+(instancetype)shopViewWithShop:(HUHShopModel *)shop;
-(instancetype)initWithShop:(HUHShopModel *)shop;
-(instancetype)initWithShop:(HUHShopModel *)shop{
    if (self = [super init]) { 
        self.shop = shop; 
    }
    return self;
}

注意:

  1. [super init] 会调用-(instancetype)initWithFrame方法--添加控件
  2. self.shop 会调用-(void)setShop方法--给控件添加数据
......
+(instancetype)shopViewWithShop:(HUHShopModel *)shop{
    HUHShopView *shopView = [[self alloc]initWithShop:shop];
    return shopView;
}

注意:
不能是self = [[self alloc]initWithShop:shop];
因为,如果是HUHShopView的子类调用此方法,那么self就变成了子类了.
所以,使用HUHShopView是确保一直是HUHShopView类.

为控件加载数据
-(void)setShop:(HUHShopModel *)shop{
    _shop = shop;
    self.imgView.image = [UIImage imageNamed:shop.icon];
    self.labTemp.text = shop.name;
}
自定义控件--添加控件
-(instancetype)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {
        UIImageView * imgView = [[UIImageView alloc]init];
        [self addSubview:imgView];
        self.imgView = imgView;
        
        UILabel *labTemp = [[UILabel alloc]init];
        [self addSubview:labTemp];
        self.labTemp = labTemp;
    }
    return  self;
}

分析:
为什么将重写-(instancetype)init方法,
更改为重写-(instancetype)initWithFrame方法?

  1. 如果外部调用时,不用[[XX alloc]init],那么就不会调用init方法,那么也就不会调用自定义控件类,那自定义控件类就没有意义了.
  2. init方法内部,其实就是调用initWithFrame方法,所以只需要重写initWithFrame方法,那么不管外部是[[XX alloc]init],还是[[XX alloc] initWithFrame:XX],都是调用initWithFrame方法.
...... 加载时,就添加好控件,且给控件赋值
HUHShopModel * shopM = self.shopDataArray[索引];
HUHShopView * shopV = [HUHShopView shopViewWithShop:shopM];
shopV.frame = CGRectMake(0, 0, shopW, shopH);
......
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。