view的封装

作者: Coder007 | 来源:发表于2016-03-07 22:29 被阅读474次

    封装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
    {
    }
    

    相关文章

      网友评论

        本文标题:view的封装

        本文链接:https://www.haomeiwen.com/subject/mdqzkttx.html