iOS 初学详细之 UITableView
来源:互联网 发布:双肩女背包 知乎 编辑:程序博客网 时间:2024/06/05 13:33
UITableView
概念:表格视图,生活中:表格由行、列组成,但是在iOS中,表格只由行来组成cell,本身也是容器。
作用,展示数据,可以对展示的数据进行增删改查操作。tableview的大部分操作都是在代理方法中进行的.
实现编辑功能步骤:
1.创建工具栏,添加编辑按钮
//创建一个工具栏
UIToolbar *tb=[[UIToolbaralloc] initWithFrame:CGRectMake(9,20, 320, 30)];
//创建一个编辑按钮,调用自身的编辑按钮
UIBarButtonItem *bi=self.editButtonItem;
//创建一个刷新按钮
UIBarButtonItem *btnFlush=[[UIBarButtonItemalloc] initWithBarButtonSystemItem:UIBarButtonSystemItemActiontarget:selfaction:@selector(on_Flush:)];
tb.items=[NSArrayarrayWithObjects:bi,btnFlush, nil];
[self.viewaddSubview:tb];
2.按钮进入编辑状态
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
[supersetEditing:editing animated:YES];
[tvsetEditing:editing animated:YES];
}
3.UITableView进入编辑状态
-(UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section) {
returnUITableViewCellEditingStyleDelete;
}
else
{
returnUITableViewCellEditingStyleInsert;
}
}
4.删除提示
-(NSString *) tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
return@"确定要删除吗?";
}
5.完成具体的编辑操作
-(void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle==UITableViewCellEditingStyleDelete) {
//删除数据源里的数据
[dataAry[indexPath.section]removeObjectAtIndex:indexPath.row];
//删除对应的cell
[tableView deleteRowsAtIndexPaths:[NSArrayarrayWithObject:indexPath ] withRowAnimation:UITableViewRowAnimationBottom];
}
elseif (editingStyle==UITableViewCellEditingStyleInsert){
//创建学生对象
qfStudent *student=[[qfStudentalloc] init];
student.stuName=@"王也";
student.stuId=@"1033";
//把学生对象加入数组中
[dataAry[indexPath.section]addObject:student];
[tableView insertRowsAtIndexPaths:[NSArrayarrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationBottom];
}
}
移动效果
qfStudent * student=dataAry[sourceIndexPath.section][sourceIndexPath.row];
NSMutableArray *t1Ary=dataAry[sourceIndexPath.section];
NSInteger i=sourceIndexPath.row;
[t1Ary removeObjectAtIndex:i];
NSInteger j=destinationIndexPath.row;
[t1AryinsertObject:student atIndex:j];
//UITableViewCell 视图,tableView中每一行都是一个UITableViewCell对象
//indexPath (section,row,用于描述此行数据位于第几分区,第几行)
//UITableViewCell 对象,被赋好值后,返回给tableView
/*UITableViewCell的重用机制
*1、不是有多少行数据,就创建多少个cell,每个UITableView都有一个可重用的队列,滑出屏幕的cell,会被先放到可重用队列中
*2、程序最多创建一屏+1个cell对象
*3、UITableView的重用机制,最大限度的节省了程序的内存开销,提高了程序的运行效率,重用机制对于程序的开发具有非凡的借鉴意义
*/
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//cell的可重用标识符
static NSString *cellId =@"cell";
//根据cell的可重用标识符,到tableView的可重用队列中,获取cell对象
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (cell == nil) {
//拿不到,则alloc init
//初始化cell,并设置cell的样式,给cell赋值可重用标识符
//UITableViewCellStyleSubtitle主标题,副标题样式
cell = [[[UITableViewCellalloc] initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:cellId] autorelease];
//设置cell选中的风格样式
cell.selectionStyle =UITableViewCellSelectionStyleGray;
//设置cell右边的附属按钮样式
cell.accessoryType =UITableViewCellAccessoryDisclosureIndicator;//blue
}
//给cell的赋值操作,写在cell == nil之外
//根据分区下标从_data中获取array
NSArray *array = [_dataobjectAtIndex:indexPath.section];
//根据行的下标,取到array中字符串
NSString *str = [array objectAtIndex:indexPath.row];
//设置cell的主标题
cell.textLabel.text = str;
//设置cell的副标题
cell.detailTextLabel.text =@"副标题";
//设置头像
cell.imageView.image = [UIImageimageNamed:@"0.png"];
return cell;
}
//每个分区里的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
上面的2个是必须实现的。下面的都是可选的,根据项目需求实现。
//分区数量,默认1
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
//分区的头标题和脚标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;
//行高(默认44),分区头标题高度,脚标题高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
//将一个view设成头标题
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
//选中表格视图某一行后,触发的方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//行被选中后,自动变回反选状态的方法
[tableView deselectRowAtIndexPath:indexPathanimated:YES];
}
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
//必须有蓝色的按钮出现,才能点击执行这个方法,点出附属按钮
NSLog(@“点击了第%d分区%d行",indexPath.section,indexPath.row);
}
#pragma mark - editing 下面都是编辑相关
- (void)customEditMethod
{//自定义按钮实现编辑方法时,需要设置一个bool型成员变量
_isEditing = !_isEditing;
[_tableViewsetEditing:_isEditinganimated:YES];
}
self.navigationItem.leftBarButtonItem =self.editButtonItem;
//作用系统自带的编辑按钮时必须按照下面的方式重写这个函数,固定写法
-(void)setEditing:(BOOL)editing animated:(BOOL)animated
{
[supersetEditing:editing animated:animated];
[myTableViewsetEditing:editing animated:animated];
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{//编辑的方法,如果其它的编辑都不设,只设了这一个,那么就会有cell右滑出现删除的按钮,也是比较常用的
if (editingStyle ==UITableViewCellEditingStyleDelete){
//删除
[[dataArrobjectAtIndex:indexPath.section]removeObjectAtIndex:indexPath.row]; //删除数据源记录
[tableView deleteRowsAtIndexPaths:[NSArrayarrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];//删除cell
} elseif (editingStyle ==UITableViewCellEditingStyleInsert) {
//插入
[[dataArrobjectAtIndex:indexPath.section]insertObject:@"a new cell"atIndex:indexPath.row];
[tableView insertRowsAtIndexPaths:[NSArrayarrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{//删除按钮的字
return @"删";
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{//返回编辑模式,默认是删除
if (indexPath.section) {
returnUITableViewCellEditingStyleInsert;
}
returnUITableViewCellEditingStyleDelete;
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{//移动,不实现这个代理方法,就不会出现移动的按钮
NSString *text=[[[dataArrobjectAtIndex:sourceIndexPath.section]objectAtIndex:sourceIndexPath.row]retain];
[[dataArrobjectAtIndex:sourceIndexPath.section]removeObjectAtIndex:sourceIndexPath.row];
[[dataArrobjectAtIndex:destinationIndexPath.section]insertObject:text atIndex:destinationIndexPath.row];
[textrelease];
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{//默认所有的都是可以编辑的(增,删)
returnYES;
}
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{//默认所有的都是可以移动的
returnYES;
}
- iOS 初学详细之 UITableView
- IOS开发之UITableView 详细讲解
- IOS UITableView详细使用
- iOS,UITableView详细介绍之基本使用(一)
- iOS,UITableView详细介绍之自定义Cell(二)
- iOS--UITableView的详细使用
- 对于初学iOS开发者有用之在UITableView的导航栏中加入Item的方法
- IOS控件之UITableView
- ios之UITableView
- IOS 之 UITableView
- IOS编程 之 UITableView
- iOS 之UITableView
- IOS之UITableView使用
- IOS学习之UITableView
- 10.ios之UITableView
- IOS学习之 UITableView
- iOS之UITableView
- IOS之UITableView
- Cache Memory
- 【Ratchet】卡片式布局
- dao、pojo、javabean
- 充斥着忙碌气息的2015春天,虽苦却乐
- reshape2介绍
- iOS 初学详细之 UITableView
- PHP安装中出现的问题
- Eclipse超实用快捷键,背熟这些开发效率提高20%
- 【Objective-C学习-8】Block
- 浅谈国产CPU, OS, 生态系统等的出路,暨小米生态、乐视生态、阿里OS
- Python 拷贝文件
- python之函数式编程
- wsimport报错Use of SOAP Encoding is not supported.
- 算法系列之二十四:离散傅立叶变换之音频播放与均衡器