xib 自定义视图

时间:2022-09-08 11:20:59

~~~~我的生活,我的点点滴滴!!





常用的自定义view的方法有三种:


1、通过初始化的时候添加views


- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// add subviews
}
return self;
}




2、通过重载drawRect画出自己想要的视图


- (void)drawRect:(CGRect)rect 
{
//......
}




3、通过xib


如果是布局复杂的话,使用上面1和2代码方式可以郁闷死人,又不能实时的看到视图效果,如果使用xib来布局,又TM的总要带个
UIViewController,关键是我TM根本不需要这货,所以我们要找一个不使用UIViewController当载体的xib方式来自定义视图。


a、在你的项目中新建个类,继承UIView,如果是继承UIView的是不能创建xib文件的,不要担心。


xib 自定义视图


b、在单独新建个xib,xib的名字要与刚才新建的类的类名一样


xib 自定义视图


c、在xib中选中View,然后更改他的class为你新建的类名,这样就和xib绑定在一起了,此后我们就可以连接IBoutlet和IBAction
到类中


xib 自定义视图


d、把View的AutoLayout可以取消,然后更改一下Autosizing项


xib 自定义视图


做完上面的操作后,如果要使用这个View和平常有点一同了,因为不在是我们来初始化和实例他了,我们需要使用下面的方式来实例、加载
他了


/**
* 初始化代码:
*
* @return [nibView objectAtIndex:0]
*/
+ (ZYCustomView *)initCustomView
{
NSArray* nibView = [[NSBundle mainBundle] loadNibNamed:@"ZYCustomView" owner:nil options:nil];
return [nibView objectAtIndex:0];
}



如果你想要在自己的代码中添加或者修改自己的定义的成员变量的值,可以重载initWithCoder来操作


-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if(self)
{
//you init
}
return self;
}



iniWithCoder是在调用[[NSBundle mainBundle] loadNibNamed:@"ZYCustomView" owner:nil options:nil]时他自动调用的


或者有些自定义没有此函数重载,那就在awakeFromNib中处理(比如自定义tableviewcell时就没有iniWithCoder函数去重载)


e、使用方法:


//在其他ViewController中使用

/**
* 在ViewController里引用
*/
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

ZYCustomView *test = [ZYCustomView initCustomView];
test.backgroundColor = [UIColor yellowColor];
test.clipsToBounds = YES;
test.frame = CGRectMake(0, 20, 320, 200);
test.lb1.text = @"我是第一行";
[self.view addSubview:test];
}



这样就使用xib轻松完成了自定义View了。