view的封装(自定义控件)

三大步骤

1.初始化view与其子控件,然后添加子控件(给view添加子控件属性)(重写init方法)

- 给view添加的属性是类扩展,降低耦合性,保护数据不被修改。
- 应该最好重写initwithFrame:(CGRect *)frame。(都会来到这个方法)

- (instancetype)init{
    if (self=[super init]) {
        self.backgroundColor = [UIColor redColor];
        UIImageView *iconView= [[UIImageView alloc]init];
        iconView.backgroundColor = [UIColor yellowColor];
        
        [self addSubview:iconView];
        _iconView = iconView;
        UILabel *laberView = [[UILabel alloc]init];
        laberView.backgroundColor =[UIColor blueColor];
        laberView.textAlignment =NSTextAlignmentCenter;
        laberView.font = [UIFont systemFontOfSize:11];
        [self addSubview:laberView];
        _lableView = laberView;//长期拥有它
    }
    return self;

2.拿到子控件(在第一步中),给子控件设置位置与尺寸(用到layoutsubviews)

 -  layoutsubviews 在父控件尺寸修改的时候调用。这时拿到父控件的尺寸,给子控件设置。 


- (void)layoutSubviews{
   [super layoutSubviews];//一定记着调用这个方法。
   float shopH = self.frame.size.height;
   float  shopW= self.frame.size.width;
   _iconView.frame =CGRectMake(0, 0, shopW, shopW);
   _lableView.frame =CGRectMake(0, shopW, shopW, shopH -shopW);
   //
   //
   //不是每一次修改立马调用这个方法,是在在一个时间段里收集修改,以最后一次修改为标准。然后在这个时间段结束的统一调用这个方法。这个是消息循环。方法内代码处在统一个循环中,一个执行时间内。
   
   //
}

3.拿到模型数据(添加模型属性),重写模型属性的set方法,然后在set方法中将传递进来的模型数据保存到成员变量,然后给子控件添加数据例如(图片,文本)。



- (void)setShop:(shops *)shop{
    _shop = shop;
    _iconView.image = [UIImage imageNamed:shop.icon];
    _lableView.text = shop.name;
    
}

总结来说就是初始化 给尺寸与位置,然后给数据(给需要的东西)。mvc

思想。

你可能感兴趣的