iOS:多个单元格的删除(方法二):
前面介绍了万无一失的方法一,这里介绍删除单元格的第二种方式,通过删除单元格中的内容的方式进行操作:(但是这种情况有一个小的弊端,由于单元格重用机制,如果单元格内容一样时,标记的存在会造成误删)
删除前:
删除后:
分析如下:(如果每一个单元格内容都不一样)采取删除单元格内容的方式是比较简单的方式,那么如何实现多个单元格的删除呢?
首先,定义两个必要的可变的数组,一个是用来存储初始化原始数据的,另一个是用来存储选中单元格后,从里面取出来的数据;
其次,通过数据源的方法将原始数据显示在表格中,同时通过代理的方法,即选中单元格的处理,来给选中的单元格添加指引视图(标记),并将首先选中的单元格内容取出存到数组中,(二次选中则将其取消标记并从数组中删除);
最后,原始数据数组将所有选中的单元格内容全部删除,与此同时,数据选中存储数组也直接清空数组,然后,将表格进行整体刷新即可。
代码如下:
#import "ViewController.h"
#define NUM 20 @interface ViewController ()<UITableViewDataSource,UITableViewDelegate>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (strong,nonatomic)NSMutableArray *products; //原始的数据库存
@property (strong,nonatomic)NSMutableArray *productStore; //选中的数据库存
- (IBAction)deleteButtonClicked:(UIBarButtonItem *)sender; @end @implementation ViewController
- (IBAction)deleteButtonClicked:(UIBarButtonItem *)sender
{
//1.将选中的所有产品从原始库存中删除
[self.productStore enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[self.products removeObject:obj];
}]; //2.清空选中的数据库存
[self.productStore removeAllObjects]; //3.整体刷新表格
[self.tableView reloadData];
}
- (void)viewDidLoad {
[super viewDidLoad];
//初始化
self.products = [NSMutableArray arrayWithCapacity:NUM];
self.productStore = [NSMutableArray arrayWithCapacity:NUM];
for(int i=; i<NUM; i++)
{
NSString *product = [NSString stringWithFormat:@"product-%02d",i];
[self.products addObject:product];
} //设置数据源和代理
self.tableView.dataSource = self;
self.tableView.delegate = self;
} #pragma mark -tableView的数据源方法
//每一个scetion有多少个row
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.products.count;
}
//设置每一个单元格的内容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//1.根据reuseIdentifier,先到对象池中去找重用的单元格对象
static NSString *reuseIdentifier = @"productCell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
//2.如果没有找到,自己创建单元格对象
if(cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
}
//3.设置单元格对象的内容
cell.textLabel.text = self.products[indexPath.row];
//设置字体颜色
cell.textLabel.textColor = [UIColor redColor];
//设置字体大小
cell.textLabel.font = [UIFont systemFontOfSize:];
//设置单元格颜色
cell.tintColor = [UIColor orangeColor]; if([self.productStore containsObject:self.products[indexPath.row]]) //首次选中
{
//添加标记显示
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else //二次选中
{
//取消标记显示
cell.accessoryType = UITableViewCellAccessoryNone;
}
return cell;
} #pragma mark -tableView的代理方法
//选中单元格时的处理
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//获取当前选中的单元格
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; //取出单元格中的产品
NSString *product = self.products[indexPath.row]; //对选中的单元格添加辅助指引视图,并将产品存储到数组中
if([self.productStore containsObject:product]) //已经选中过一次
{
//取消标记
cell.accessoryType = UITableViewCellAccessoryNone; //将产品从存储数组中删除
[self.productStore removeObject:product];
}
else //首先选中
{
//添加标记
cell.accessoryType = UITableViewCellAccessoryCheckmark; //将产品添加到存储数组中
[self.productStore addObject:product];
}
}
@end
iOS:多个单元格的删除(方法二):的更多相关文章
- iOS:多个单元格的删除(方法一)
采用存取indexPath的方式,来对多个选中的单元格进行删除 删除前: 删除后: 分析:如何实现删除多个单元格呢?这需要用到UITableView的代理方法,即选中单元格时对单元格做的处理,同时我们 ...
- JavaScript动态改变表格单元格内容的方法
本文实例讲述了JavaScript动态改变表格单元格内容的方法.分享给大家供大家参考.具体如下: JavaScript动态改变表格单元格的内容,下面的代码通过修改单元格的innerHTML来修改单元格 ...
- UITableViewCell单元格的删除、插入、移动
UITableViewDelegate的方法 设置编辑模式中得cell的编辑样式(删除或插入) - (UITableViewCellEditingStyle)tableView:( ...
- iOS tableView 静态单元格的实现
本文转自:http://home.cnblogs.com/u/wendingding/ iOS开发UI篇—简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一 ...
- IOS 取消表格单元格 TableViewCell 去掉高亮状态 点击Cell取消选择状态
以下是两种实现效果 1. 自定义cell 继承UITableViewCell 重写 -(void)setSelected:(BOOL)selected animated:(BOOL)animated ...
- iOS:UITableViewCell自定义单元格
UITableViewCell:自定义的单元格,可以在xib中创建单元格,也可以在storyBorad中创建单元格.有四种创建方式 <1>在storyBorad中创建的单元格,它是静态的单 ...
- Jupyter Notebook单元格加宽的方法3种
Jupyter Notebook的代码单元格比较窄,在我的屏幕上只占了一半都不到,网络搜索下,共找到3种加宽的方法,总结一下. (一)只改变当前Jupyter笔记本的单元格宽度 在Jupyter No ...
- iOS集合视图单元格高亮和选中的区别
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交 ...
- jxl获取excel中的合并的单元格(主要是方法介绍)
Range[] rangeCells = sheet.getMergedCells();// 返回sheet中合并的单元格数组 for (Range r : rangeCells) {//对数组遍历拿 ...
随机推荐
- 小甲鱼Python笔记(类)
类和对象 类的构造方法 def __init__(): 1 class People: 2 def __init__(self,name): 3 self.name = name 注意:在构造方法中的 ...
- Deepin 2015 安装惠普打印机驱动
参考:https://bbs.deepin.org/forum.php?mod=viewthread&tid=34749&extra= 1.安装新立得包管理器:sudo apt-get ...
- loadrunner可用许可证
global-100: AEAMAUIK-YAFEKEKJJKEEA-BCJGIweb-10000: AEABEXFR-YTIEKEKJJMFKEKEKWBRAUNQJU-KBYGBglobal-10 ...
- bzoj 1102
思路:用dfs 会爆栈,巨坑,要用bfs. #include<bits/stdc++.h> #define LL long long #define fi first #define se ...
- 14:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密
首先简单解释一下)) //要使用updateStateByKey方法,必须设置Checkpoint. ssc.checkpoint("/checkpoint/") val sock ...
- poj2253 Frogger(Floyd)
题目链接 http://poj.org/problem?id=2253 题意 给出青蛙A,B和若干石头的坐标,现在青蛙A要跳到青蛙B所在的石头上,求出所有路径中最远那一跳的最小值. 思路 Floyd算 ...
- jquery DOM操作(一)
上一篇文章是记录了jquery中选择器的作用,这里只要记录下jquery中的DOM操作,还是按照上篇的格式来. 下面是测试用的html代码,接下来DOM的操作会在下面的代码下进行. <body& ...
- Spring框架 AOP面向切面编程(转)
一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnbl ...
- poj1789(prim)
prim和kruskal都是求解最小生成树的算法.这道题题意就是有N个字符串就是N个节点,而字符串之间的距离就是节点边的长度,求其最小生成树的边权和. 由于是第一次用prim,所以在求安全边的时候采用 ...
- 绘制bitmap 全屏 安卓获取 屏幕大小
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 绘制bitmap 全屏 Rectf rectF = new RectF(0, 0, w, ...