自定义视图:提高代码质量(可复用,可移植)
步骤:根据需求的不同,⾃自定义视图继承的类也有所不同。⼀般⾃定义的视图会继承于UIView。以下是⾃自定义视图的要点:
1、创建⼀个UIView⼦类
2、在类的初始化⽅法中添加⼦视图
3、类的.h⽂文件提供⼀些接⼝(⽅法),便于外界操作⼦视图。
.h文件
@interface Label_TextField : UIView
//定义实例变量
@property(nonatomic,retain) UILabel *label;
@property(nonatomic,retain) UITextField *field;
//初始化方法
- (instancetype)initWithFrame:(CGRect)frame
andLabelText:(NSString*)labelText
andPlaceholder:(NSString*)placeholder;
@end
.m文件
@implementation Label_TextField
//重写dealloc方法,释放定义的实例变量
- (void)dealloc
{
[_label release];
[_field release];
[super dealloc];
}
//重写init方法
-(id)init
{
//此处调用的是本类中的指定初始化方法,即initWithFrame:
self=[self initWithFrame:CGRectZero];
if (self) {
}
return self;
}
//重写initWithFrame:方法
- (instancetype)initWithFrame:(CGRect)frame
{
self=[super initWithFrame:frame];
if (self) {
//添加label对象,添加到视图上,并其赋值给实例变量label
UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(0,0,frame.size.width/3, frame.size.height)];
[self addSubview:label];
[label release];
//将创建的label赋给_label
self.label=label;
//添加field对象,添加到视图上,并其赋值给实例变量field
UITextField *field=[[UITextField alloc]initWithFrame:CGRectMake(frame.size.width/3, 0, frame.size.width*2/3, frame.size.height)];
field.backgroundColor=[UIColor orangeColor];
[self addSubview:field];
[field release];
self.field=field;
}
return self;
}
//自定义初始化方法,将UILabel对象的text和UITextField的placeholder赋值
- (instancetype)initWithFrame:(CGRect)frame
andLabelText:(NSString*)labelText
andPlaceholder:(NSString*)placeholder
{
self=[self initWithFrame:frame];
if (self) {
self.label.text=labelText;
self.field.placeholder=placeholder;
}
return self;
}
//重写setFrame:方法 当视图重绘是需要重新设置UILabel和UITextField的frame
- (void)setFrame:(CGRect)frame
{
[super setFrame:frame];
self.label.frame=CGRectMake(0, 0, frame.size.width/3, frame.size.height);
self.field.frame=CGRectMake(frame.size.width/3, 0, frame.size.width*2/3, frame.size.height);
}
@end