IOS开发学习笔记025-xib和storyboard
stotyboard : 描述软件界面,大范围,比较适合整个软件的所有界面
xib文件的使用:描述软件界面,小范围,比较适合描述小界面
在xcode新建文件窗口可以看到两个文件,storyboard和empty

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

xib文件的使用,加载文件使用NSBundle
// 创建一行,从xib中加载一行
- (UIView *)createRowView
{
// 加载xib文件,并且创建里面的所有对象,并按顺序保存到数组中
NSArray *allViews = [[NSBundle mainBundle] loadNibNamed:@"Empty" owner:nil options:nil];
//NSLog(@"%ld",allViews.count); // 取出红色的view进行
UIView *view = allViews[]; // 设置头像
UIButton *icon = (UIButton *)[view viewWithTag:];
int index = arc4random_uniform();
NSString *iconName = [NSString stringWithFormat:@"01%d.png",index];
[icon setImage:[UIImage imageNamed:iconName] forState:UIControlStateNormal]; // 设置姓名
UILabel *lab = (UILabel *)[view viewWithTag:];
int nameIndex = arc4random_uniform();
lab.text =_allNames[nameIndex]; // 监听删除按钮
UIButton *del = (UIButton *) [view viewWithTag:];
[del addTarget:self action:@selector(deleteClick:) forControlEvents:UIControlEventTouchUpInside]; return view;
}
如果想要在界面上实现连线响应事件,需要改变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的操作封装起来
然后添加一个类方法返回初始化后的对象

然后实现方法如下
+ (UIView *)rowViewWithIcon:(NSString *)iconName andName:(NSString *)name
{
// 获得xib文件中得对象
UIView *child = [[NSBundle mainBundle] loadNibNamed:@"RowView" owner:self options:nil][];
// 设置头像
UIButton *icon = (UIButton *)[child viewWithTag:];
[icon setImage:[UIImage imageNamed:iconName] forState:UIControlStateNormal]; // 设置标签
UILabel *lab = (UILabel *)[child viewWithTag:];
lab.text = name; return child; }
这样写的话对按钮的响应有两种方式
第一种是改变xib文件的class为按钮响应方法的类,然后通过连线方式响应
第二种是通过代码直接绑定事件,要注意
// 通过xib创建一行
- (UIView *)createRowView
{
// 返回view对象
NSString *iconName = [NSString stringWithFormat:@"01%d.png",arc4random_uniform()];
UIView *rowView = [RowView rowViewWithIcon:iconName andName:_allNames[arc4random_uniform()]];
// 设置头像
UIButton *icon = (UIButton *)[rowView viewWithTag:];
// 头像按钮监听事件
[icon addTarget:self action:@selector(iconClick:) forControlEvents:UIControlEventTouchUpInside];
// 设置删除按钮监听事件
UIButton *delBtn = (UIButton *)[rowView viewWithTag:];
// 添加删除按钮监听事件
[delBtn addTarget:self action:@selector(deleteClick:) forControlEvents:UIControlEventTouchUpInside];
return rowView;
}
源代码:
链接: http://pan.baidu.com/s/1kT3lFfh 密码: 927c
IOS开发学习笔记025-xib和storyboard的更多相关文章
- ios开发学习笔记(这里一定有你想要的东西,全部免费)
1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用). 其实在代码里还是可以设置的,那就是删除背景view [ ...
- iOS开发学习笔记:基础篇
iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境 ...
- ios开发学习笔记(1)
objective-c基础总结 第一二章 1.application:didiFinishLauchingWithOptions:程序启动后立即执行 2.启动界面代码格式:self.window = ...
- (ios开发学习笔记一)ios项目文件结构
转自:http://www.cnblogs.com/macroxu-1982/archive/2012/07/31/2616389.html 下面是单个窗体项目例子,我们从这个项目开始,说明ios项目 ...
- iOS开发学习笔记
1 常用的第三方工具 1.1 iPhone Simulator 测试程序需要模拟器iPhone Simulator 1.2 设计界面需要Interface Builder,Interface Buil ...
- IOS开发学习笔记042-UITableView总结2
一.自定义非等高的cell 如常见的微博界面,有的微博只有文字,有的有文字和图片.这些微博的高度不固定需要重新计算. 这里简单说一下几种方法.前面的步骤和设置等高的cell一样.现在来 ...
- IOS开发学习笔记041-UITableView总结1
一.UITableView的常用属性 1.分割线 // 分割线 self.tableView.separatorColor = [UIColorredColor]; // 隐藏分割线 self.tab ...
- IOS开发学习笔记038-autolayout 自动布局 界面实现
在storyboard/xib文件中实现自动布局 autolayout 1.注意事项 autolayout和frame属性是有冲突的,所以如果准备使用autolayout,就不要再代码中对控件的fra ...
- IOS开发学习笔记030-xib实现淘宝界面
使用xib文件实现界面,然后通过模型更新数据. 1.使得控制器继承自UITableViewController 2.创建xib文件,实现界面如下:一个UIImageView,两个lable 3.新建一 ...
随机推荐
- Linux命令行环境与桌面环境护切换
1.前言 在大部分情况下,我们在使用Linux时习惯使用命令行环境,但是有时候也还是会使用到安装桌面环境,所以在这里介绍一下如何给没有安装桌面环境的系统安装桌面环境.以Centos 6.5 为例演示一 ...
- mail客户端POP和IMAP协议
POP-邮局协议 mail客户端如果使用POP协议,那么线上服务器的邮件将会自动下载到客户端. IMAP-因特网消息访问协议 mail客户端如果使用IMAP协议,邮件服务器上的邮件将不会自动下载到客户 ...
- sql队伍的胜负情况
1.数据显示情况 2.sql语句执行情况 USE [数据库名] GO /****** Object: Table [dbo].[测试] Script Date: 08/03/2017 10:58:02 ...
- sql server 2016新特性 查询存储(Query Store)的性能影响
前段时间给客户处理性能问题,遇到一个新问题, 客户的架构用的是 alwayson ,并且硬件用的是4路96核心,内存1T ,全固态闪存盘,sql server 2016 . 问题 描述 客户经常出现 ...
- crontab配置shell实现后台进程不间断运行
检测get_report_no.php进程是否一直在运行 #!/bin/bash PROC=`ps -ef |grep get_report_no.php|grep -v grep|wc -l` if ...
- pat乙级1067
1.用cin输入数据后,再用getline 输入,还是会输入cin已经输入的数据,即cin和getline互相独立. 2.题目中没有说尝试的密码不包含空格,因此不能用cin,而用getline. #i ...
- swift 命名空间实现的设计思考:extension YKKit where Base == String
设计问题:谁来构造.构造什么.怎么添加新功能 关键词:本体.客体.构造.映射.功能. 别名:桥接变量.型变变量.容器变量.适配变量,构造变量: 目的:添加命名空间.添加新功能. 原则:不修改本体的实现 ...
- 2dsphere索引
概念:球面地理位置索引 创建方式: db.collection.ensureIndex({w:'2dsphere'}) wdspere中,位置的表示方式不再是简单的经度,纬度,数组,而是变成一种复杂的 ...
- Linux系统运维常见面试简答题(36题)
1.请描述下linux 系统的开机启动过程开机加电BIOS自检———–>MBR引导———–>grub引导菜单———–>加载内核———–>启动init进程———–>读取in ...
- 2018.6.2 AndroidStudio项目中的问题:===== oast.LENGTH_LONG和Toast.LENGTH_SHORT分别对应多长时间
oast.LENGTH_LONG和Toast.LENGTH_SHORT分别对应多长时间 在Android源码中的NotificationManagerService.java这个类中定义了两个静态变量 ...