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) {//对数组遍历拿 ...
随机推荐
- day1作业二:多级菜单
作业二:多级菜单 1.三级菜单 2.可以次选择进入各子菜单 3.所需新知识点:列表.字典 4.打印b回到上一层 5.打印q退出循环 流程图如下: readme: (1)存储三级菜单的字典;设置 ...
- vim编码相关
与vim编码相关的四个配置: encoding:vim核心编码,所有vim交换区,信息提示区都用这个编码.打开文件的编码如果是其他编码,会自动转换为核心编码,保存时再转回文件编码. fileencod ...
- 【栈模拟dfs】Cells UVALive - 3486
题目链接:https://cn.vjudge.net/contest/209473#problem/D 题目大意:有一棵树,这棵树的前n个节点拥有子节点,告诉你n的大小,以及这n个节点各有的子节点个数 ...
- bWAPP练习--injection篇SQL Injection (GET/Search)
SQL注入: SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到 ...
- HashMap实现原理及常见问题
1.简介 HashMap是基于哈希表的Map接口的实现,用来存放键值对(Entry<Key,Value>),并提供可选的映射操作.使用put(Key,Value)存储对象到HashMap中 ...
- getattr(sys.modules[__name__], func_name)
有时我们需要将一个文件的信息(类.函数及变量)保存到文件,我们不能直接保存函数对象,而是将其转化为fn.__name__,问题来了,当我们想通过读取文件的形式重新配置这些类.函数时,该如何把这些字符串 ...
- java8新特性——方法引用与构造器引用
上篇文章简单学习了java8内置得4大核心函数式接口,这类接口可以解决我们遇到得大多数得业务场景得问题.今天来简单学习一下方法引用与构造器引用. 一.方法引用 方法引用:若lambda 体中得内容已经 ...
- HDU 1698 Just a Hook (线段树)
Problem Description In the game of DotA, Pudge’s meat hook is actually the most horrible thing for m ...
- poj 3468 A Simple Problem with Integers 线段树区间加,区间查询和
A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?i ...
- PAT甲级1033. To Fill or Not to Fill
PAT甲级1033. To Fill or Not to Fill 题意: 有了高速公路,从杭州到任何其他城市开车很容易.但由于一辆汽车的坦克容量有限,我们不得不在不时地找到加油站.不同的加油站可能会 ...