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

简介:

  采用存取indexPath的方式,来对多个选中的单元格进行删除

删除前:                      

     

删除后:   

  分析:如何实现删除多个单元格呢?这需要用到UITableView的代理方法,即选中单元格时对单元格做的处理,同时我们也要定义一个可变的数组,用来存储选中的数据,以便后来的删除。这里采用存储indexPath的方式,因为每选中一个单元格时,它都对应着一个indexPath,同时,将选中的单元格添加指引视图,即打对勾,也要判断打对勾是否重复,根据此来显示单元格的标记。最后,将标记的数据全部在原数据库中删除,同时在清空存储数据的数组,刷新表格即可。删除过程中,涉及到排序问题,下面的代码中将有介绍。

复制代码
  1 #import "ViewController.h"
  2 #define NUM 20
  3 @interface ViewController ()<UITableViewDataSource,UITableViewDelegate>
  4 @property (strong,nonatomic)NSMutableArray *products;       //原始的产品库存
  5 @property (strong,nonatomic)NSMutableArray *cellIndexPaths;  //存放选中的单元格
  6 @property (weak, nonatomic) IBOutlet UITableView *tableView; 
  7 - (IBAction)deleteButtonClicked:(UIBarButtonItem *)sender;
  8 
  9 @end
 10 
 11 @implementation ViewController
 12 
 13 - (void)viewDidLoad {
 14     [super viewDidLoad];
 15     //初始化
 16     self.products = [NSMutableArray arrayWithCapacity:NUM];
 17     self.cellIndexPaths = [NSMutableArray arrayWithCapacity:NUM];
 18     for(int i=0; i<NUM; i++)
 19     {
 20         NSString *product = [NSString stringWithFormat:@"product-%02d",i];
 21         [self.products addObject:product];
 22     }
 23     
 24     //设置数据源和代理
 25     self.tableView.dataSource  = self;
 26     self.tableView.delegate = self;
 27 }
 28 
 29 //删除所有选中的单元格的IndexPath
 30 //说明:在每一次进行删除的时候,如果总是从数组的后面删除,结果是没有影响的,但是,如果从前面开始删除的话,那么数组中后面的元素会依次向前递进,此时它们的indexPath就全改变了,结果就会出问题。此时,就需要对选中的元素进行排序操作。
 31 - (IBAction)deleteButtonClicked:(UIBarButtonItem *)sender
 32 {
 33     //对选中的元素进行排序操作(按升序排列)
 34     [self.cellIndexPaths sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
 35         NSIndexPath *ip1 = (NSIndexPath*)obj1;
 36         NSIndexPath *ip2 = (NSIndexPath*)obj2;
 37         if(ip1.row == ip2.row)
 38         {
 39             return NSOrderedSame;
 40         }
 41         else if(ip1.row > ip2.row)
 42         {
 43             return NSOrderedDescending;
 44         }
 45         else
 46         {
 47             return NSOrderedAscending;
 48         }
 49         
 50     }];
 51     
 52     //1.从原始数据中删除选中的单元格中的产品(倒着删除)
 53     [self.cellIndexPaths enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
 54         [self.products removeObjectAtIndex:((NSIndexPath*)obj).row];
 55     }];
 56     
 57     //2.清空记录选中的数组
 58     NSArray *tempArray = [NSArray arrayWithArray:self.cellIndexPaths];
 59     [self.cellIndexPaths removeAllObjects];
 60     
 61     //3.进行局部的刷新
 62     [self.tableView deleteRowsAtIndexPaths:tempArray withRowAnimation:UITableViewRowAnimationLeft];
 63 }
 64 
 65 #pragma mark -tableView的数据源方法
 66 //每一个section有多少个row
 67 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 68 {
 69     return self.products.count;
 70 }
 71 //设置每一个单元格的内容
 72 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 73 {
 74     //1.根据reuseIdentifier,先到对象池中去找重用的单元格对象
 75     static NSString *reuseIdentifier = @"productCell";
 76     UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
 77     //2.如果没有找到,自己创建单元格对象
 78     if(cell == nil)
 79     {
 80         cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
 81     }
 82     //3.设置单元格对象的内容
 83     cell.textLabel.text = self.products[indexPath.row];
 84     
 85     if([self.cellIndexPaths containsObject:indexPath]) //初次选中时,标记一下
 86     {
 87         cell.accessoryType = UITableViewCellAccessoryCheckmark;
 88     }
 89     else //再次选中时,取消标记
 90     {
 91         cell.accessoryType = UITableViewCellAccessoryNone;
 92     }
 93     
 94     return cell;
 95 }
 96 
 97 #pragma mark -tableView的代理方法
 98 //对选中的单元格的处理
 99 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
100 {
101     //1.取出当前单元格
102     UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
103     
104     //3.将取出的单元格所在的indexPath添加到数组中,并给单元格添加辅助指引视图
105     if([self.cellIndexPaths containsObject:indexPath])  //已经存在
106     {
107         cell.accessoryType = UITableViewCellAccessoryNone;
108         
109         //从数组中删除
110         [self.cellIndexPaths removeObject:indexPath];
111     }
112     else
113     {
114         cell.accessoryType = UITableViewCellAccessoryCheckmark;
115         
116         //添加到数组中
117         [self.cellIndexPaths addObject:indexPath];
118     }
119 }
120 
121 @end
复制代码

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!


本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4792665.html,如需转载请自行联系原作者
目录
相关文章
|
安全 编译器 开发工具
​iOS安全加固方法及实现
​iOS安全加固方法及实现
275 0
​iOS安全加固方法及实现
|
iOS开发 开发者
📝 App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
在iOS应用程序开发过程中,进行App备案并获取公钥及证书SHA-1指纹是至关重要的步骤。本文将介绍如何通过appuploader工具获取iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹,帮助开发者更好地理解和应用该过程。
|
移动开发 前端开发 数据安全/隐私保护
iOS发布证书.p12文件无密码解决办法及导出带密码的新.p12文件方法
iOS发布证书.p12文件无密码解决办法及导出带密码的新.p12文件方法
1116 0
|
存储 监控 iOS开发
iOS应用崩溃了,如何通过崩溃手机连接电脑查找日志方法
在iOS应用开发过程中,调试日志和奔溃日志是开发者必不可少的工具。当iOS手机崩溃时,我们可以连接电脑并使用Xcode Console等工具来查看日志。然而,这种方式可能不够方便,并且处理奔溃日志也相当繁琐。克魔助手的出现为开发者带来了极大的便利,本文将详细介绍其功能和使用方法。 克魔助手会提供两种日志,一种是实时的,一种的是崩溃的。(由于崩溃日志的环境很麻烦,目前只展示实时日志操作步骤)
|
存储 iOS开发 开发者
使用克魔助手进行iOS数据抓包和HTTP抓包的方法详解
使用克魔助手进行iOS数据抓包和HTTP抓包的方法详解
718 0
|
小程序 前端开发 Android开发
解决小程序中textarea ios端样式不兼容的两种方法
解决小程序中textarea ios端样式不兼容的两种方法
977 0
|
运维 iOS开发 Windows
windows电脑备案ios APP获取公钥和证书指纹Sha-1值的方法
在阿里云进行APP备案、在备案IOS端的环节的时候,发现需要我们将p12证书安装在电脑上,再用xcode或或钥匙串访问来获取这个证书的公钥和sha-1值。 但是大部分开发uniapp应用的同学们,或者进行发布的运维人员的电脑都是windows,无法按照阿里云的教程来获取ios的公钥和sha-1。备案就被卡主了。 这里介绍下另一个方法,就是使用香蕉云编来在线上传证书获取。如下图所示,打开香蕉云编后,找到下图这个功能
1501 0
|
语音技术 开发工具 图形学
Unity与IOS⭐一、百度语音IOS版Demo调试方法
Unity与IOS⭐一、百度语音IOS版Demo调试方法
|
Android开发 iOS开发 开发者
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
,在appuploder直接复制IOS信息;如果还没有创建证书,请上传正确的P12苹果证书后,系统会自动解析出对应的签名和公钥信息; ——APP备案的原理是基于原有的工信部域名备案系统,如果已经有了域名备案,无需新增备案主体;只需要在之前的域名备案系统里面,新增APP信息,收集的APP信息主要包括APP包名和签名及公钥这3项;——APP备案是属于行政常规主体信息预存,和域名一样,自行决定是否备案。目前国内安卓应用商店是全面要求APP备案的,如果没有APP备案是不能通过审核发布到各大应用商店。——如看了教程,还不清楚怎么获取APP包名、安卓签名、苹果sha1签名、公钥等信息,请联系我们在线客服,
|
Android开发 iOS开发 开发者
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
1963 0