view的封装

封装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
{
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容