xib:描述软件界面,小范围,轻量级,比较适合描述某个小界面
两个各有优缺点
//1.加载RowView.xib
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"RowView” owner:self options:nil];
loadNibNamed:从资源中读取xib文件
如果想通过连线的方式去调用头文件中的方法,需要给xib文件设置File’s Owner的Custom Class 中的Class设置为ViewController(需要连线的控制器的名称)
在读取xib文件的时候owner属性需要执行相同的控制器名称(设置和代码中的需要一致)
以Dog为例:
如果xib文件中的按钮需要调用Dog头文件中的方法,同时xib文件的加载是放在ViewController文件中,那么NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"RowView” owner:_d1 options:nil];
owner后面需要填写的就必须是Dog对象,根据不同对象可以使用对象的属性
xib的加载过程
首先解析xib文件
根据(根据添加的先后顺序)xib文件创建各个控件
然后返回一个集合(集合中装的时各个控件)
File’s Owner使用总结:
-》在xib文件中设置File’s Owner 的Class属性(目的是在xib文件中能找到Owner中的方法)
-》建立File’s Owner跟控件之间的联系
-》利用代码加载xib,注意owner参数(类型一定要匹配)
view的封装:
我们可以使用File’s Owner将xib文件和控制器关联,这样就能再控制器中对xib文件进行操作,但是通常我们不会使用这种方法,因为xib文件将依赖于控制器,耦合性太强。
所以我们可以自定义一个view,也就是将xib文件和单独的文件联系起来。
以RowView为例:
第一步:新建一个RowView.xib文件和普通的文件RowView.h和RowView.m(继承自UIView),两个文件的文件名尽量相同(也可以不相同)
第二步:选中view,然后再右边将Class属性改成RowView
这样就可以在xib中的控件上和RowView.h文件间进行连线
第三步:这样就可以在RowView.h中定义一些成员变量和xib中的控件关联,然后通过操作成员变量来改变控件的属性
RowView.h最好是提供一个类方法来进行对成员变量的操作
在其他的控制器中需要使用的时候需要自己创建UIView
RowView *newView = [RowView rowView];
通过上面三步产生的xib文件和.h和.m文件一起可以拷贝到其他项目中使用,在自身的项目中也可以重用