使用Xib自定义View
2018-07-25 本文已影响15人
阶梯
xib应用场景
Xib是用来描述局部的软件界面的,要求要描述的界面的子控件相对于父控件的位置要固定不变,
并且加载Xib时,最终得到的是一个数组,这个数组表示的是我们这个Xib文件中有多少个界面,
一般情况下,为了简便,我们的Xib文件中都只放一个界面,
这样以便于可以通过返回的数组的 lastObject和firstObject拿到它(因为文件里面就是它一个),
但是要给Xib里面的子控件设置数据的话,可以有两种方法:
1>第一种是通过数组和下标的方法拿到它的子控件,再设置数据,但是这种方法很盲目。
2>第二种是把这个Xib封装进一个类,也就是把它交给一个类来管理,这样就可以通过连线的方式直接拿到XIb的子控件,再给它设置数据,这种方法直观准确,我们一般用这种。
xib的使用注意:
- 1>xib创建完后一定要记得改class类型
- 2>当通过Xib来加载View时,是不会执行init方法和initWithFrame方法
- 3>当通过Xib来加载View时,会执行initWithCoder(初始化当前控件)和awakeFromNib(所有控件都已经初始化完)
- 4>如果想要通过Xib来加载View,不能通过alloc init或者initWithFrame创建View.(创建出来为空)
- 5>为了方便外界可以快速通过Xib来创建View,通常情况下,View会对外提供一个类方法来创建
xib创建步骤
1> 创建一个名为“TestView”的view
创建View.png2> 创建一个名为“TestView”的 Xib View
Xib创建1.png Xib创建2.png3>选中TestView.xib,点击View,更改Custom Class为“TestView”(即刚才所创建的TestView.h和TestView m文件),如图所示。如果要修改View的大小,可以设置属性Size为 “Freeform”。
添加关联.png代码实现
.h
#import <UIKit/UIKit.h>
@interface TestView : UIView
+(instancetype)testViewClass;
@end
.m
#import "TestView.h"
@implementation TestView
+(instancetype)testViewClass{
return [[[NSBundle mainBundle] loadNibNamed:@"TestView" owner:self options:nil] lastObject];
// lastObject 可改为 firstObject,该数组只有一个元素,写哪个都行
}
@end