iOS基础开发-自定义控件

自定义控件,设置子控件的尺寸和位置
  当系统提供的控件满足不了我们的需求,我们可以自定义一个控件,继承系统自带的控件,写一个属于自己的控件.自定义控件的好处是可以把封装控件内部的细节,不容易被外界随意修改.如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部子控件的创建屏蔽起来,不让外界关心.外界可以传入对应的模型数据给view,view拿到模型数据后给内部的子控件设置对应的数据.有时候无法知道用户是用哪一种方法创建对象,如果是使用 init方法的话,就调用init的重写方法,如果用户用initWithFrame创建就无法调用init方法.所以建议重写方法的时候都重写initWithFrame方法,因为无论用那种方法创建都会调用此方法

封装控件的基本步骤
在initWithFrame:方法中添加子控件,提供便利构造方法
在layoutSubviews方法中设置子控件的frame(一定要调用super的layoutSubviews)
增加模型属性,在模型属性set方法中设置数据到子控件上
自定义控件的步骤大致分为四步:
1.新建一个继承UIView的类
2.在initWithFrame:方法中添加子控件
3.在layoutSubviews方法中设置子控件的frame(一定要调用[super layoutSubviews])
4.提供一个模型属性,重写模型属性的set方法
  事实上,我们可以在自动以控件的时候,多添加一些方法,供外界获取.譬如,重写init方法,重写initWithXXX的方法,这样可以使代码更加简洁,提高阅读性.例如:
- (instancetype)init
{
    if (self = [super init]) {
        // 添加图片
        UIImageView *iconImageView = [[UIImageView alloc] init];
        [self addSubview:iconImageView];
        self.iconImageView = iconImageView;
        
        // 添加文字
        UILabel *nameLabel = [[UILabel alloc] init];
        nameLabel.textAlignment = NSTextAlignmentCenter;
        [self addSubview:nameLabel];
        self.nameLabel = nameLabel;
    }
    return self;
}

- (instancetype)initWithShop:(XMGShop *)shop
{
    XMGShopView *shopView = [self init];
    shopView.shop = shop;
    return shopView;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值