iOS:多个单元格的删除(方法二):

  前面介绍了万无一失的方法一,这里介绍删除单元格的第二种方式,通过删除单元格中的内容的方式进行操作:(但是这种情况有一个小的弊端,由于单元格重用机制,如果单元格内容一样时,标记的存在会造成误删)

删除前:

iOS:多个单元格的删除(方法二):

删除后:

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
上一篇:C#调用C++


下一篇:windows 基于命令行制作vhd虚拟磁盘