UITableview 多行删除
// RootViewController.m
#import "RootViewController.h"
#import "NextViewController.h"
@interface RootViewController ()
{
NSMutableArray * dataSource;//数据源
NSMutableArray * removeArr;//存放删除的所有元素
UITableView * table;
BOOL isEditing;//标识表格的编辑状态
NextViewController * next;
}
@end
@implementation RootViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.title = @"表格视图";
self.navigationItem.rightBarButtonItem = self.editButtonItem;//编辑按钮
//初始化数据源
dataSource = [[NSMutableArray alloc]init];
for(int i = 0;i<10;i++)
{
NSString * string = [NSString stringWithFormat:@"测试数据%d",i+1];
[dataSource addObject:string];
}
//初始化表格视图
table = [[UITableView alloc]initWithFrame:CGRectMake(0, 64, 320, 480 - 64) style:UITableViewStylePlain];
table.delegate = self;
table.dataSource = self;
[self.view addSubview:table];
//设置当前表格的编辑状态
isEditing = NO;
self.automaticallyAdjustsScrollViewInsets = NO;
//为表格添加额外的视图控件
UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0, 0, 300, 44);
//btn按钮的frame的有效值为宽和高
//为表格视图添加额外控件必须借助表格的两个属性之一 tableFooterView或者tableHeaderView 将额外的控件添加在表格的底部或者顶部
//tableFooterView和tableHeaderView这两个位置的视图高度为44像素
[btn setTitle:@"删除" forState:UIControlStateNormal];
btn.backgroundColor = [UIColor redColor];
[btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(pressBtn:) forControlEvents:UIControlEventTouchUpInside];
//将按钮添加到表格的底部
table.tableFooterView = btn;
//初始化子视图控制器对象
next = [[NextViewController alloc]init];
//删除数组进行初始化操作
removeArr = [[NSMutableArray alloc]init];
}
-(void)pressBtn:(id)sender
{
if(isEditing)//处于编辑状态 才进行删除
{
//<1>先移除数据源中与删除数组中相同的元素信息
[dataSource removeObjectsInArray:removeArr];
//<2>清空删除数组中的内容
//如果不清空删除数组中的内容 下一次删除操作会在删除数组的内容基础上继续追加 那么第一步的移除操作一定会程序崩溃
[removeArr removeAllObjects];
//<3> ------- 重要 -------
// 刷新表格
// 否则数据源信息和表格上显示的信息不一致
[table reloadData];
}
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [dataSource count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString * string = @"str";
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:string];
if(cell == nil)
{
cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:string]autorelease];
}
cell.textLabel.text = [dataSource objectAtIndex:indexPath.row];
return cell;
}
//开启表格的编辑状态
-(void)setEditing:(BOOL)editing animated:(BOOL)animated
{
[super setEditing:editing animated:YES];
isEditing = !isEditing;
//判断表格处于非编辑状态的时候 (避免选中单元格以后直接设置表格为非编辑状态 再次编辑表格的时候将上一次选中的单元格一同删除)
if(!isEditing)
{
[removeArr removeAllObjects];
}
[table setEditing:isEditing animated:YES];
}
//设置单元格的编辑样式
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleDelete|UITableViewCellEditingStyleInsert;
//同时为单元格设置编辑样式为删除和添加样式 那么该单元格就变成多选样式
}
//单元格选中时调用该方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//通过判断表格是否处于编辑状态 来决定单元格的状态
if(isEditing)
{
[removeArr addObject:[dataSource objectAtIndex:indexPath.row]];
}
else
{
//处于非编辑状态就可以进行界面跳转操作
UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
NSString * text = cell.textLabel.text;
//获取点击单元格上的图片
//UIImage * image = cell.imageView.image
next.navigationItem.title = text;
[self.navigationController pushViewController:next animated:YES];
}
}
//反选中方法---选中的单元格再次点击就处于非选中状态
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
//获取反选中单元格中的内容
NSString * string = [dataSource objectAtIndex:indexPath.row];
//判断删除数组是否存在反选中单元格的内容
if([removeArr containsObject:string])
{
[removeArr removeObject:string];
}
}

UITableview 多行删除的更多相关文章
- VI中的多行删除与复制
VI中的多行删除与复制 法一: 单行删除,:(待删除行)d 多行删除 ,:,10d 法二: 光标所在行,dd 光标所在行以下的N行,Ndd 方法1: 光标放到第6行, 输入:2yy 光标放到第9行, ...
- 用bat批处理程序通过DOS命令行删除所有的空文件夹
用过gothub或者码云的同学都知道,不包含任何文件的空文件夹上传提交时不被允许的.当然你可以在空文件下创建.keep文件(或.gitkeep文件),然后就可以上传了. 但是如果空文件夹比较多,并且我 ...
- vim常用命令之多行注释和多行删除
vim中多行注释和多行删除命令,这些命令也是经常用到的一些小技巧,可以大大提高工作效率. 1.多行注释: 1. 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式; ...
- UITableView划动删除的实现
对于app应用来说,使用列表的形式展现数据非UITableView莫属.在熟练掌握了用UITableView展示数据以后,是不是也遇到了需要删除数据的需求?是不是觉得在一行数据上划动一下,然后出现一个 ...
- ios UITableView多选删除
第一步, - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath ...
- iOS UITableView划动删除的实现
标签:划动删除 iphone 滑动删除 ios UITableView 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://rainb ...
- vim中多行注释和多行删除命令
1.多行注释: 1. 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式; 2. 在行首使用上下键选择需要注释的多行; 3. 按下键盘(大写)“I”键,进入插入 ...
- VI中的多行删除与复制(转)
VI中的多行删除与复制 法一: 单行删除,:(待删除行)d 多行删除 ,:,10d 法二: 光标所在行,dd 光标所在行以下的N行,Ndd 方法1: 光标放到第6行, 输入:2yy 光标放到第9行, ...
- jquery datatable 多行(单行)选择(select),行获取/行删除
jquery datatable 多行(单行)选择(select),行获取/行删除 代码展示 // 示例数据源 var dataSet = [ ['Tasman','Internet Explorer ...
随机推荐
- kvm与selinux
Desktop virsh start 16lnmp error: Failed to start domain 16lnmp error: unsupported configuration: Un ...
- [转]Java Thread Dump 性能分析
Java and Thread 一个 web 服务器使用几十到几百个线程来处理大量并发用户,如果一个或多个线程使用相同的资源,线程之间的竞争就不可避免了,并且有时候可能会发生死锁. Thread co ...
- Linux防火墙规则的查看、添加、删除和修改
这里只列出比较常用的参数,详细的请查看man iptables 1.查看 iptables -nvL –line-number -L查看当前表的所有规则,默认查看的是filter表,如果要查看NAT表 ...
- hdu 1018:Big Number(水题)
Big Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- java中基本输入输出流的解释(flush方法的使用)
转自:http://fsz521job.itpub.net/post/5606/34827 网络程序的很大一部分是简单的输入输出,即从一个系统向另一个系统移动字节.字节就是字节,在很大程度上,读服务器 ...
- WCF例子
WCF入门简单教程(图文) VS2010版 http://hi.baidu.com/grayworm/item/5bb61792fec5b54af142159f http://hi.baidu.com ...
- Xamarin Android布局文件没有智能提示
Xamarin Android布局文件没有智能提示 在Visual Studio 2015中,Android项目的Main.axml文件没有智能提示,不便于布局文件的编写.解决办法:(1)从Xamar ...
- BZOJ1075 : [SCOI2007]最优驾车drive
设$f[i][j][k]$为到达$(i,j)$,用时为$\frac{k}{5lcm}$小时的最低耗油量,然后DP即可. #include<cstdio> const int N=12,M= ...
- BZOJ1580 : [Usaco2009 Hol]Cattle Bruisers 杀手游戏
以贝茜为参照物,则贝茜固定于原点,每个杀手是一个圆心在某条射线上的圆. 解出每个杀手可以射杀贝茜的时间区间,然后扫描线即可,时间复杂度$O(n\log n)$. #include<cstdio& ...
- cSS3 伪类:nth-child 的使用方法
:nth-child是一个非常牛逼的伪类,如果你能很好的理解它就可以用CSS 做出很多非常实用的效果.当我很年轻的时候还使用PHP的i++来实现一些东西,其实CSS 完全可以实现.下面是我总结的一些用 ...