自定义控件,设置子控件的尺寸和位置
当系统提供的控件满足不了我们的需求,我们可以自定义一个控件,继承系统自带的控件,写一个属于自己的控件.自定义控件的好处是可以把封装控件内部的细节,不容易被外界随意修改.如果一个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;
}
当系统提供的控件满足不了我们的需求,我们可以自定义一个控件,继承系统自带的控件,写一个属于自己的控件.自定义控件的好处是可以把封装控件内部的细节,不容易被外界随意修改.如果一个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;
}