IOS开发学习笔记025-xib和storyboard

 

 

stotyboard : 描述软件界面,大范围,比较适合整个软件的所有界面

xib文件的使用:描述软件界面,小范围,比较适合描述小界面

 

 

在xcode新建文件窗口可以看到两个文件,storyboard和empty

IOS开发学习笔记025-xib和storyboard_第1张图片

可以在xib文件中直接添加各种控件,并设置相关的属性。

IOS开发学习笔记025-xib和storyboard_第2张图片

xib文件的使用,加载文件使用NSBundle

 1 // 创建一行,从xib中加载一行
 2 - (UIView *)createRowView
 3 {
 4     // 加载xib文件,并且创建里面的所有对象,并按顺序保存到数组中
 5     NSArray *allViews = [[NSBundle mainBundle] loadNibNamed:@"Empty" owner:nil options:nil];
 6     //NSLog(@"%ld",allViews.count);
 7    
 8     
 9     // 取出红色的view进行
10     UIView *view = allViews[0];
11     
12     // 设置头像
13     UIButton *icon = (UIButton *)[view viewWithTag:1];
14     int index = arc4random_uniform(9);
15     NSString *iconName  = [NSString stringWithFormat:@"01%d.png",index];
16     [icon setImage:[UIImage imageNamed:iconName] forState:UIControlStateNormal];
17     
18     // 设置姓名
19     UILabel *lab = (UILabel *)[view viewWithTag:3];
20     int nameIndex = arc4random_uniform(4);
21     lab.text =_allNames[nameIndex];
22     
23     // 监听删除按钮
24     UIButton *del = (UIButton *) [view viewWithTag:2];
25     [del addTarget:self action:@selector(deleteClick:) forControlEvents:UIControlEventTouchUpInside];
26     
27     return view;
28 }

 

 

 

如果想要在界面上实现连线响应事件,需要改变xib的File's ower 的Custom Class 为要连线的类

然后在loadNibNamed:@"empty" ower:self option:nil

其中self就是要连线的类或对象

 

 

File's ower

1、在xib文件中设置File's ower的class属性,目的是在xib文件中能找到owner的方法

2、建立File's owner 跟控件之间的联系

3、利用代码加载xib文件,传递owner参数(类型一定要匹配)

 

xib的封装实现

添加一个RowView类将rowView的操作封装起来

然后添加一个类方法返回初始化后的对象

IOS开发学习笔记025-xib和storyboard_第3张图片

然后实现方法如下

 1 + (UIView *)rowViewWithIcon:(NSString *)iconName andName:(NSString *)name
 2 {
 3     // 获得xib文件中得对象
 4     UIView *child = [[NSBundle mainBundle] loadNibNamed:@"RowView" owner:self options:nil][0];
 5     // 设置头像
 6     UIButton *icon = (UIButton *)[child viewWithTag:1];
 7     [icon setImage:[UIImage imageNamed:iconName] forState:UIControlStateNormal];
 8   
 9     // 设置标签
10     UILabel *lab = (UILabel *)[child viewWithTag:2];
11     lab.text = name;
12     
13     return child;
14 
15 }

 这样写的话对按钮的响应有两种方式

第一种是改变xib文件的class为按钮响应方法的类,然后通过连线方式响应

第二种是通过代码直接绑定事件,要注意

 1 // 通过xib创建一行
 2 - (UIView *)createRowView
 3 {
 4     // 返回view对象
 5     NSString *iconName = [NSString stringWithFormat:@"01%d.png",arc4random_uniform(9)];
 6     UIView *rowView = [RowView rowViewWithIcon:iconName andName:_allNames[arc4random_uniform(5)]];
 7     // 设置头像
 8     UIButton *icon = (UIButton *)[rowView viewWithTag:1];
 9     // 头像按钮监听事件
10  [icon addTarget:self action:@selector(iconClick:) forControlEvents:UIControlEventTouchUpInside]; 11     
12     // 设置删除按钮监听事件
13     UIButton *delBtn = (UIButton *)[rowView viewWithTag:3];
14     // 添加删除按钮监听事件
15  [delBtn addTarget:self action:@selector(deleteClick:) forControlEvents:UIControlEventTouchUpInside]; 16 
17     return rowView;
18 }

 

 

源代码:

链接: http://pan.baidu.com/s/1kT3lFfh 密码: 927c

 

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