1 纯代码的方式
-
新建一个继承自UIView的类
-
在init方法中添加子控件
-
在layoutSubviews方法中设置子控件的frame(一定要调用[super layoutSubviews])
-
提供一个模型属性,重写模型属性的set方法
-
在set方法中,取出模型属性,给对应的子控件赋值
// 纯代码时,用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;
}
/**
* 布局子控件,设置子控件的frame
*/
- (void)layoutSubviews
{
// 这里一定要调用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);
}
/**
* 设置数据
*/
- (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 默认是mainBundle
NSArray *array = [nib instantiteWithOwer:nil object:nil];
-
通过xib自定义控件的步骤
-
创建一个xib文件
-
新建一个继承自UIView的类,管理该xib文件,xib的文件名最好与类名一致
-
修改xib中父控件的class为控件类名
-
将子控件进行连线
-
在set方法中给子控件设置数据
-
提供模型属性,重写模型的set方法
3 初始化方法
(1)凡是通过代码创建控件的时候,会调用方法- (instancetype)initWithFrame:(CGRect)frame
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
NSLog(@"initWithFrame");
}
return self;
}
(2)凡是通过xib,stroyboard 创建控件的时候,就会调用方法- (instancetype)initWithCoder:(NSCoder *)coder
- (instancetype)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (self) {
NSLog(@"initWithCoder");
//注意:在此方法中不能获得子控件
// NSLog(@"%@", self.iconView);
}
return self;
}
(3)凡是通过xib,stroyboard 创建控件之后,就会调用方法- (void)awakeFromNib
- (void)awakeFromNib {
//在此方法中一定要调用[super awakeFromNib];
//可以在此方法中对子控件进行初始化操作
[super awakeFromNib];
NSLog(@"awakeFromNib");
NSLog(@"==%@", self.iconView);
}
网友评论