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

 

 

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

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

 

 

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

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

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的操作封装起来

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

然后实现方法如下

复制代码
 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

 

posted @   struggle_time  阅读(467)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示