ios开发之xib的详细加载过程

相信来看这篇的文章的朋友们都是知道xib文件,并且用过xib文件的吧,所以在这里我就直接进入正题直接说说xib的详情加载过程把。关于xib的加载过程主要是这个函数

  [[NSBundle mainBundle] loadNibNamed:(NSString *) owner:(id) options:(NSDictionary *)];

那我就来说说这个函数内部, 苹果官方解析的相信过程吧

为了方便解释, 我还是附上图片吧


- (NSArray *)loadNibName(NSString *)name owner:(id)owner options:(NSDictionary *)options

{

// 首先会相信解析name.xib下的所有Object对象 (xib其实是xml 文件)

创建name.xib下的Object所以对象

这里我就已第一个对象View来模拟xib的解析

解析View的各个属性来创建第一个“我是按钮”所在的这个UIView

解析过程如下:

// 创建一个View

UIView *view = [[UIView alloc] init];

// 设置view的各个属性

view.backgroundColor = [UIColor blueColor];

......

// 创建一个按钮

UIButton *button = [[UIButton alloc] init];

// 设置按钮各个属性

...

// 添加按钮到view上

[view addSubview: button];



// 创建其他的两个控件并解析控件设置其属性

}

注意: 上面那个函数返回的是一个数组, 所以需要用到那个对象注意其下标

通过上面那个函数只是简单的加载xib视图, 要想对里面的控件进行拖线, 或者监听 就要设置xib里面的File's Owner

现在我先来说一下设置File's Owner前后的差别吧, 为此, 我先创建一个UIView的类来供“我是按钮”所在的这个UIView连线使用, 并且给这个类声明并实现了对象方法 - (IBAtion)buttonCilck; 如图








现在设置xib的File's Owner的Custom Class的实力对象为我们创建的MyView, 并且通过连线监听按钮点击


如下图代表连线成功 , 就可以监听按钮点击事件了



然后通过在ViewController.m文件的- (void)viewDidLoad 方法写 代码加载xib



现在我来演示一个初学者常见的错误

注意: 上图箭头所指的owner 并不是我们xib里面的File's Owner, 当前为nil; 现在运行程序, 程序可以正常运行, 但是点击“我的按钮”, 程序就立马崩溃了 

因为当前按钮已经有点击事件了, 点击按钮时, 会调用owner的buttonClick方法, 当前owner为nil 所以会出错

因为owner的类型为(id),所以这里我创建一个Dog类来监听点击, 并让Dog类声明和实现- (IBAtion)buttonClick;方法

, 然后通过设置File's Owner的Custom Class的class为 Dog使我们的狗可以监听按钮点击




然后创建一条狗dog 并令owmer的参数为dog



然后运行程序(command + R)

运行后,点击按钮还是会崩溃,这次显示的原因和上次一样,并不是我们这个方法错了, 而是我们创建的这条是局部变量,这个函数运行完就销毁了, 所以我们要给控制器设置一个dog属性,来解决这个问题



现在运行程序就不会有问题了,点击一下按钮 狗就会监听到 输出 汪汪汪.....



现在我来总结一下File's Owner的使用步骤

1> 在xib中设置File's Owner的class 属性(目的是为了在xib中能找到owner的方法)

2> 建立File's Owner跟控件之间的联系(拖线)

3> 利用代码加载xib, 传递owner的参数(类型一定要与File's Owner的class 一致

如果还有不清除的可以留言,评论, 如果我有空会尽量给大家解答的!

如果需要源代码,可在如下百度云链接下载:

链接: http://pan.baidu.com/s/1sj3LwxJ 密码: 9g6w


好了,大概也就这些了,谢谢你们的阅读! 你们的评论是对我最大的鼓励! 谢谢


发布了28 篇原创文章 · 获赞 21 · 访问量 5万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章