view的封装
- 如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部子控件的创建屏蔽起来,不让外界关心
- 外界可以传入对应的模型数据给view,view拿到模型数据后给内部的子控件设置对应的数据
封装控件的基本步骤
- 在initWithFrame:方法中添加子控件,提供便利构造方法
- 在layoutSubviews方法中设置子控件的frame(一定要调用super的layoutSubviews)
- 增加模型属性,在模型属性set方法中设置数据到子控件上
/**
*init方法内部会自动调用initWithFrame:方法
*/
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
self.backgroundColor = [UIColor orangeColor];
// 添加商品图片
UIImageView *iconView = [[UIImageView alloc]init];
iconView.backgroundColor =[UIColor redColor];
[self addSubview:iconView];
self.iconView = iconView;
// 添加商品名字
UILabel *nameLable = [[UILabel alloc]init];
nameLable.backgroundColor = [UIColor blueColor];
nameLable.textAlignment = NSTextAlignmentCenter;
nameLable.font = [UIFont systemFontOfSize:14];
[self addSubview:nameLable];
self.nameLable = nameLable;
}
return self;
}
布局子控件(layoutSubviews)
* 这个方法专门用来布局子控件,一般在这里设置子控件的frame
* 当控件本身的尺寸发生改变的时候,系统会自动调用这个方法
// 一定要调用super的layoutSubviews
— (void)layoutSubviews{
[super layoutSubviews];
self.nameLabel.frame = CGRectMake(0, shopW, shopW, shopH - shopW);
}