封装view较为简单,封装tableview比较麻烦,封装tableview的方法后面会有。
view的封装
-
如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部子控件的创建屏蔽起来,不让外界关心
-
外界可以传入对应的模型数据给view,view拿到模型数据后给内部的子控件设置对应的数据
-
封装控件的基本步骤
- 在initWithFrame:方法中添加子控件(还可以使用懒加载),提供便利构造方法
- 在layoutSubviews方法中设置子控件的frame
//一定要调用 [super layoutSubviews];
- 增加模型属性,在模型数据set方法中设置数据到子控件上
+ (instancetype)shopView
{
return [[self alloc] init];
}
- (UIImageView *)iconView
{
if (_iconView == nil) {
UIImageView *iconView = [[UIImageView alloc] init];
iconView.backgroundColor = [UIColor blueColor];
[self addSubview:iconView];
_iconView = iconView;
}
return _iconView;
}
- (UILabel *)nameLabel
{
if (_nameLabel == nil) {
UILabel *nameLabel = [[UILabel alloc] init];
nameLabel.font = [UIFont systemFontOfSize:11];
nameLabel.textAlignment = NSTextAlignmentCenter;
nameLabel.backgroundColor = [UIColor redColor];
[self addSubview:nameLabel];
_nameLabel = nameLabel;
}
return _nameLabel;
}
/**
init方法内部会自动调用initWithFrame:方法
*/
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
}
return self;
}
/**
* 这个方法专门用来布局子控件,一般在这里设置子控件的frame
* 当控件本身的尺寸发生改变的时候,系统会自动调用这个方
*
*/
- (void)layoutSubviews{
// 一定要调用super的layoutSubviews
[super layoutSubviews];
}
- (void)setShop:(YWShop *)shop
{
}
网友评论