iOS - 表格
一、 TableView
1.1 StoryBoard方式
1.2 nib方式
1.2.1 一般
1.2.2 自定义单元格
1.3 纯代码方式
(1) 简单表视图操作
Step1:
实现协议 2个协议:<UITableViewDataSource,UITableViewDelegate>
Step2:
创建UITableView对象 & 设置表格视图对象的代理与表格数据源的代理
//创建一个区域,用来显示表格
// CGRect rect = CGRectMake(0, 40, 300, 420);
CGRect rect = CGRectMake(0, 40, 300, 420);
//初始化表格视图
UITableView *tableView = [[UITableView alloc]initWithFrame:rect];
//设置表格视图对象的代理
tableView.delegate = self;
//设置表格视图数据源的代理
tableView.dataSource = self;
[self.view addSubview:tableView];
Step3: 设置单元格高度
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 5;
}
Step4: 初始化和返回表格视图的单元格
//该代理方法,用来初始化和返回表格视图的单元格,是最重要的一个代理方法
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//创建一个字符串,作为单元格的标识符
static NSString *identifier = @"cellIndentifier";
//单元格的标识符,可以看作是一个重用机制,此方法可以从,所有已经开辟内存的单元格里面,选择一个具有同样标识符的、空闲的单元格
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
//如果没有重复使用的单元格,则创建新的单元格
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
//设置单元格的标题文字内容
cell.textLabel.text = @"Cell title here.";
//设置单元格的文字描述内容
cell.detailTextLabel.text = @"Detail Information here";
}
return cell;
}
(2) 其它操作
a. 设置单元格高度
//该代理方法用来设定单元格的高度
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 80;
}
b. 设置单元格图标
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"cellIndenfier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
cell.textLabel.text = @"Cell title here.";
cell.detailTextLabel.text = @"Detail Information here.";
//建立一个图片对象,导入第一张图片,作为单元格默认状态的图片
UIImage *img1 = [UIImage imageNamed:@"alarm1.png"];
//建立另一张图片对象,导入第二张图片,作为单元格被选中状态的图片
UIImage *img2 = [UIImage imageNamed:@"alarm2.png"];
//将第一个图片对象,指定为单元格默认图片
cell.imageView.image = img1;
//将第二个图片对象,指定为单元格的高亮图片
cell.imageView.highlightedImage = img2;
}
return cell;
}
c. 设置单元格数据源
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier =@"cellIndentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
//索引路径用来标识单元格在表格中的位置,它有section和row两个属性,前者标识单元格处于第几个段落,后者标识单元格在段落中的第几行
NSInteger num = [indexPath row];
//获取数组中的数据,指定为当前单元格的标题文字.
cell.textLabel.text = [_array objectAtIndex:num];
cell.detailTextLabel.text = @"Detail Information here";
}
return cell;
}
d. 设置单元格背景色
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier =@"cellIndentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
//获取 当前 单元格的行数
NSInteger num = [indexPath row];
//设置单元格的标题文字内容
cell.textLabel.text = @"Title Information";
//设置单元格的描述文字内容
cell.detailTextLabel.text = @"Detail Information here";
if (num == 1) {
//选择第二行单元格,则设置单元格背景色为紫色
[cell setBackgroundColor:[UIColor purpleColor]];
}
else { //若不是第二行,则设置为另外一种背景
//1.
CGRect rect = CGRectMake(0, 0, 50, 50);
//创建一个视图对象
UIView *view = [[UIView alloc] initWithFrame:rect];
//设置视图对象的背景颜色为褐色
[view setBackgroundColor:[UIColor brownColor]];
//将视图作为单元格的背景视图,这里视图的作用是仅改变单元格的背景色,也可以根据需要,设定一张图片作为背景.
[cell setBackgroundView:view];
//2.
// [cell setBackgroundColor:[UIColor redColor]];
}
}
return cell;
}
e. 设置单元格Accessory样式
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.accessoryType == UITableViewCellAccessoryNone)
cell.accessoryType = UITableViewCellAccessoryCheckmark;
else
cell.accessoryType = UITableViewCellAccessoryNone;
}
f. 删除单元格
//该代理方法,用来设定单元格的编辑方式
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
//设置单元格的编辑模式为删除模式
return UITableViewCellEditingStyleDelete;
}
//该代理方法,用来处理单元格编辑结束后的动作
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
//判断是否为删除操作
if (editingStyle == UITableViewCellEditingStyleDelete) {
//获得当前编辑的单元格的行编号
NSInteger num = [indexPath row];
//从数组中将该单元格的内容清楚,以保证数据的一致性
[_array removeObjectAtIndex:num];
//再从表格视图中清楚该单元格
NSArray *indexPaths = [NSArray arrayWithObjects:indexPath, nil];
[tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
}
}
g. 插入单元格
//该代理方法,用来设定单元格的编辑方式
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
//设置单元格的编辑模式为插入模式
return UITableViewCellEditingStyleInsert;
}
//该代理方法,用来处理单元格编辑结束后的动作
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
//判断是否为删除操作
if (editingStyle == UITableViewCellEditingStyleInsert) {
//获得当前编辑的单元格的行编号
NSInteger num = [indexPath row];
//从数组中将该单元格的内容清楚,以保证数据的一致性
[_array insertObject:@"Nice day" atIndex:num];
//再往表格视图中插入新单元格
NSArray *indexPaths = [NSArray arrayWithObjects:indexPath, nil];
[tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
}
}
h. 更改单元格顺序
//该代理方法,用来设定单元格的编辑方式
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
//设置单元格的编辑方式为编辑模式
return UITableViewCellEditingStyleNone;
}
//用来设定是否允许拖动单元格
-(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
//用来响应单元格的移动动作.
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
//获得单元格移动前的位置
NSInteger fromRow = [sourceIndexPath row];
//获得单元格移动后的位置
NSInteger toRow = [destinationIndexPath row];
//获得数组在单元格移动前的对象
id obj = [_array objectAtIndex:fromRow];
//删除数组中单元格移动前位置的对象
[_array removeObjectAtIndex:fromRow];
[_array insertObject:obj atIndex:toRow];
}
二、CollectionView
2.1 StoryBoard方式
2.2 nib方式
1.2.1 一般
1.2.2 自定义单元格
2.3 纯代码方式
iOS - 表格的更多相关文章
- iOS表格制作
由于项目上的需求,需要做一个表格出来,来显示流程状态.刚开始脑子一头雾水,没有一点思路,但是靠着自己的座右铭--“世上无难事,只怕有心人”,克服了所有困难.好,不说了,讲正事. 制作表格,还是需要ta ...
- IOS常用框架
IOS开发中有用的第三方库 #Objective-C中最受瞩目库 [链接](https://github.com/languages/Objective-C/most_watched) * [th ...
- IOS开发中有用的第三方库
#Objective-C中最受瞩目库 [链接](https://github.com/languages/Objective-C/most_watched) * [three20](https:/ ...
- 直接拿来用!最火的iOS开源项目
1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目.AFNetworking是一个轻量级的iOS.Mac OS X网络通信类库,现在是G ...
- (转)直接拿来用!最火的iOS开源项目(二)
“每一次的改变总意味着新的开始.”这句话用在iOS上可谓是再合适不过的了.GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7, ...
- IOS常用开源库
转自:http://www.csdn.net/article/2013-06-18/2815806-GitHub-iOS-open-source-projects-two/1 1. AFNetwork ...
- GitHub上非常受开发者欢迎的iOS开源项目(二)
"每一次的改变总意味着新的开始."这句话用在iOS上可谓是再合适不过的了.GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x ...
- IOS开发常见第三方总结
链接](https://github.com/languages/Objective-C/most_watched) * [three20](https://github.com/facebook ...
- iOS开源项目周报0323
由OpenDigg 出品的iOS开源项目周报第十三期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等. CHIPag ...
随机推荐
- 搭建Spring + SpringMVC + Mybatis框架之三(整合Spring、Mybatis和Spring MVC)
整合Spring和SpringMVC 之前已经整合了spring和mybatis,现在在此基础上整合SSM. 项目目录: 思路:SpringMVC的配置文件独立,然后在web.xml中配置整合. (1 ...
- LuaFileSystem学习心得
LuaFileSystem(简称lfs)是一个用于lua进行文件訪问的库,和Lua版本号同步.且是跨平台的,在为lua安装lfs之前须要先安装luarocks, luarocks是一个用于安装lua库 ...
- Android应用集成支付宝接口的简化
拿到支付宝接口的andriod demo后有点无语,集成一个支付服务而已,要在十几个java类之间引用来引用去,这样不仅容易导致应用本身代码结构的复杂化,调试起来也很累,于是操刀改造之: 该删的删,该 ...
- iOS NSData
NSData全部API学习. 学习NSData,在网上找资料竟然都是拷贝的纯代码,没人去解释.在这种网上没资料的情况下,整理这个API文件好难,好艰辛.在这贡献给大家了,么么哒~示例程序用红色标注. ...
- IOS编程之相机和相册
概述 IOS设备中的相机和相册,是我们在项目开发中经常会使用到的多媒体元素,使用相机可以获得最新想要的照片,而使用相册则可以访问IOS设备中的图片资源 使用IOS设备中的相机/相册获得图片资源 是否允 ...
- linux 内核调试方法
http://my.oschina.net/fgq611/blog/113249 http://my.oschina.net/fgq611/blog/112929
- stm32f107vc在IAR环境下,引用库函数的工程文件的配置方法
stm32做开发很方便的一个原因是大家可以稍稍放松对于硬件寄存器等的设置,因为stm32有了非常丰富和实用的库函数,外设文件等等,所以我们在使用的时候可以更加关注程序开发的过程和逻辑关系.但是,在开发 ...
- QWT6.0.1+win7下安装说明
A) 简介 1.QWT是一个基于LGPL版权协议的开源项目, 可生成各种统计图.它为具有技术专业背景的程序提供GUI组件和一组实用类,其目标是以基于2D方式的窗体部件来显示数据, 数据源以数值,数组或 ...
- MUI功能列表
打开App引导页面 - http://www.bcty365.com/content-146-4970-1.html 页面传值 - http://www.bcty365.com/content-1 ...
- iOS开发中添加PrefixHeader.pch要注意的问题
在Xcode6.0已经不默认生成PrefixHeader.pch文件了,而PrefixHeader.pch文件对我们开发带来的便利性是不言而喻的,所以我们怎么在工程中添加PrefixHeader.pc ...