iOS开发之多XIB之间相互关联

Xib link Xib

1.直接加载xib中的UIView

创建一个View1.xib, 随便设一个背景色,加一个标识UILabel, 这样好知道是这个view是哪一个view. 你可以在这个view上加作意的subview,我只是说明原理,所以这儿并没有加作何subview. 最终我的View1如下图:
iOS开发之多XIB之间相互关联_第1张图片

由于View1会放到其它View上作为subview,所以这儿size是Freeform, Status Bar是:None。

将下面代码放到viewDidLoad中:

iOS开发之多XIB之间相互关联_第2张图片

&1这行代码就是加载View1.xib, 然后将xib中的UIView实保存到views中, 由于xib中我们只拖入了一个view, 所以这儿lastObject就返回这个view的实例,这样便加载了xib中的UIView. 接着将这个UIView addSubview到其它view上,运行效果如图:

iOS开发之多XIB之间相互关联_第3张图片

2.通过Owner建立变量关联

首先我们为ViewController创建一个IBOutlet属性:
iOS开发之多XIB之间相互关联_第4张图片

File’s Owner中,我们设为ViewController, 这样我们就可以与实例变量_referencedView建立关联了,如图
iOS开发之多XIB之间相互关联_第5张图片

接着在viewDidLoad中,在刚才加入的代码下面添加如下代码:

iOS开发之多XIB之间相互关联_第6张图片

与//1中的代码有点类似,只不过owner属性为self了。这样一来,loadNibNamed后,就会实例化与之关联的变量_referencedView, 运行程序你将会看到效果:
iOS开发之多XIB之间相互关联_第7张图片

3.Class Owner建立变量关联

其实这个原理与上面2说的一样的,只不过这儿我们特别定义一个class来作为xib的Owner, 要所有需要关系的view都可以声明在这个Owner中,这样方便代码管理与维护。
这儿我们声明一个NSObject的子类FileOwner, 然后再在FileOnwer中声明IBOutLet的关联变量:

@property (nonatomic, weak) IBOutlet UIView *view;

同理创建一个View3.xib, File’s Owner设为FileOwner, 并建立view关联:

iOS开发之多XIB之间相互关联_第8张图片

接着在viewDidLoad结尾处添加以下代码:

iOS开发之多XIB之间相互关联_第9张图片

iOS开发之多XIB之间相互关联_第10张图片

4.引入UIView Category

为了代码简单,我们增加一个UIView Category方法

这里写图片描述
其中FileOwner的class 方法:

这样加载xib的代码就会变得更简单。
同理,我们创建一个View4.xib, File’s Owner设为FileOwner, 并建立view关联:
iOS开发之多XIB之间相互关联_第11张图片

接着在viewDidLoad尾添加代码:

这里写图片描述

iOS开发之多XIB之间相互关联_第12张图片

5.自定义UIView类

在4Category的基础上,我们再引入自定义UIView类,并在xib中与之关联。首先我们创建一个UIView字类UIView5.
接着,我们创建一个View5.xib, File’s Owner设为FileOwner, 并建立view关联:

iOS开发之多XIB之间相互关联_第13张图片

接着增加一个UIView的Category方法:

这里写图片描述

在viewDidLoad尾加入代码:

这里写图片描述
iOS开发之多XIB之间相互关联_第14张图片

6.设置Onwer为UIViewController

首先,我们创建一个View6.xib, File’s Owner设为UIViewController. 这样UIViewController的view属性关联我们xib中的UIView iOS开发之多XIB之间相互关联_第15张图片

接着在viewDidLoad中添加代码:

这里写图片描述

iOS开发之多XIB之间相互关联_第16张图片

说了这么多,是时候做一下总结了,其实其本是两个方法,一个是没有File’s Onwer直接加载xib中的UIView,二是通过File’s Onwer关联变量加载xib中的UIView。 然后就是一些Category提供简单接口而已。大家可以再细细品味一下上面所介绍的内容。

大家可以看我源码中UIView+Ext的Category方法中还提供了一个方法:+ (id)loadFromNibNoOwner;它应是方法5与方法1的组合,在此我就不细说了。 都是由上面两个基本方法演变出来的。

大家有没有想过在xib中link其它xib? 很可惜苹果不支持这个功能。但是我们可以通过一点技巧实现这个功能。下而我就简单介绍一下
先说一下原理,加载xib的UIView,如果这个UIView是自定义的UIView(即xib中关联了UIView的子类),如下图:

那么在加载显示这个view的时候会触发一些方法,如:

- (id)initWithCoder:(NSCoder *)aDecoder - (id)awakeAfterUsingCoder:(NSCoder*)aDecoder

我们就在这儿作些文章,在这儿用前面介绍的方法加载想要的的xib中UI实例替换掉原来返回的实例。

首先我写了一个UIView的了类SubView,代码很容易理解:
iOS开发之多XIB之间相互关联_第18张图片
iOS开发之多XIB之间相互关联_第19张图片

创建一个EmbeddedView.xib,我们想在其它xib中直接link这个EmbeddedView.xib, 还需要创建一个SubView的了类EmbeddedView.
我的xib信息是这样的:
iOS开发之多XIB之间相互关联_第20张图片

一切就绪后,运行:
iOS开发之多XIB之间相互关联_第21张图片

结束

xib可以快速布署UI, 可以提高开发速度哦。
下载地址

iOS开发之多storyboard相互关联 地址:
http://blog.csdn.net/BaiHuaXiu123/article/details/51344871

你可能感兴趣的:(UIView,ios开发,xib)