1 純代碼的方式
新建一個繼承自UIView的類
在init方法中添加子控件
在layoutSubviews方法中設(shè)置子控件的frame(一定要調(diào)用[super layoutSubviews])
提供一個模型屬性,重寫模型屬性的set方法
在set方法中,取出模型屬性,給對應(yīng)的子控件賦值
// 純代碼時,用init方法
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
// 添加圖片
UIImageView *iconImageView = [[UIImageView alloc] init];
iconImageView.backgroundColor = [UIColor yellowColor];
[self addSubview:iconImageView];
self.iconImageView = iconImageView;
// 添加文字
UILabel *nameLabel = [[UILabel alloc] init];
nameLabel.backgroundColor = [UIColor purpleColor];
nameLabel.textAlignment = NSTextAlignmentCenter;
[self addSubview:nameLabel];
self.namelabel = nameLabel;
}
return self;
}
/**
* 布局子控件,設(shè)置子控件的frame
*/
- (void)layoutSubviews
{
// 這里一定要調(diào)用super
[super layoutSubviews];
CGFloat shopW = self.frame.size.width;
CGFloat shopH = self.frame.size.height;
self.iconImageView.frame = CGRectMake(0, 0, shopW, shopW);
self.namelabel.frame = CGRectMake(0, shopW, shopW, shopH - shopW);
}
/**
* 設(shè)置數(shù)據(jù)
*/
- (void)setShop:(XMGShop *)shop
{
_shop = shop;
self.iconImageView.image = [UIImage imageNamed:shop.icon];
self.namelabel.text = shop.name;
}
2 加載xib的方式
// 方式1:
NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"test" owner:nil options:nil];
// 方式2:
UINib *nib = [UINib nibWithNibName:@"Test" bundle:nil]; // nil 默認(rèn)是mainBundle
NSArray *array = [nib instantiteWithOwer:nil object:nil];
通過xib自定義控件的步驟
創(chuàng)建一個xib文件
新建一個繼承自UIView的類,管理該xib文件,xib的文件名最好與類名一致
修改xib中父控件的class為控件類名
將子控件進(jìn)行連線
在set方法中給子控件設(shè)置數(shù)據(jù)
提供模型屬性,重寫模型的set方法
3 初始化方法
(1)凡是通過代碼創(chuàng)建控件的時候,會調(diào)用方法- (instancetype)initWithFrame:(CGRect)frame
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
NSLog(@"initWithFrame");
}
return self;
}
(2)凡是通過xib,stroyboard 創(chuàng)建控件的時候,就會調(diào)用方法- (instancetype)initWithCoder:(NSCoder *)coder
- (instancetype)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (self) {
NSLog(@"initWithCoder");
//注意:在此方法中不能獲得子控件
// NSLog(@"%@", self.iconView);
}
return self;
}
(3)凡是通過xib,stroyboard 創(chuàng)建控件之后,就會調(diào)用方法- (void)awakeFromNib
- (void)awakeFromNib {
//在此方法中一定要調(diào)用[super awakeFromNib];
//可以在此方法中對子控件進(jìn)行初始化操作
[super awakeFromNib];
NSLog(@"awakeFromNib");
NSLog(@"==%@", self.iconView);
}