首先注意需要重写-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
这里需要注意的是返回的结果应该是
return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
虽然这个在xcode4.2编译器的时候可能会报错,提示类型问题,自己做一个强转即可,当然如果你的程序已经全面淘汰ios4,使用ios5的话,其实tableview有专门的变量去设置,即allowsMultipleSelection变量设置为YES。
通过上面的style告诉tableview我们需要进行的是多行操作。
然后当我们需要进入多行操作时,肯定需要进入编辑模式,所以需要调用
[self.tableview setEditing:YES animated:YES]
进入编辑模式后,点击cell可以进行选择和反选,这个时候就需要我们自己记录那些cell被选择,那些cell没有被选择,即在下列方法里处理
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
- (void)tableView:(UITableView *)tableView didDeRowAtIndexPath:(NSIndexPath *)indexPath
这样我们就记录了需要进行操作的cell数组了。如果你只是需要一般的tableview进行多行操作,那么基本上到此也就差不多可以了
但是如果你的界面有点风格的话,可能就需要再多点操作了。因为默认情况下进入多选操作时左边的圆圈和对勾都是系统默认的,似乎也没地方可以修改。况且你还容易因为左边缩进而导致cell一些贴图颜色的风格出现问题。
那么我自己的解决方案在下面.
首先要看下这个东西UITableViewCell的selectionStyle,这个style有3个值,分别是:
UITableViewCellSelectionStyleNone
UITableViewCellSelectionStyleBlue
UITableViewCellSelectionStyleGray
顾名思义是用来表示cell选中时出现的标示选中的颜色,但这里有个看似神奇的地方。就是当你设置cell为UITableViewCellSelectionStyleGray或者UITableViewCellSelectionStyleBlue时,且当你进入多选编辑模式时,你选中的那个cell会有一条偏白的选中条,而且貌似还很不容易修改其颜色,那么当你的cell实际背景色和这个偏白选中条不和谐时,我想就是你头疼的地方了。所以为了能多选编辑情况下能完全自定义选中的效果,我的做法是当tableview的editing为YES时设置cell.selectionStyle为UITableViewCellSelectionStyleNone,这样不管我们选不选中cell,系统再也不会主动帮我做一些自以为很好的效果。但是同时由于去掉了选中的效果后,为了表达我们选中的哪些cell,我们就需要重写cell的select方法去自绘出响应的选择效果。
即重写你的自定义的cell类里的select方法
[plain] view plaincopy

  1. -(void)setSelected:(BOOL)selected animated:(BOOL)animated
  2. {
  3. if (self.editing)//仅仅在编辑状态的时候需要自己处理选中效果
  4. {
  5. if (selected){
  6. //选中时的效果
  7. }
  8. else {
  9. //非选中时的效果
  10. }
  11. }
  12. }

这样就解决了选中与不选中的效果了。但是还有个问题,就是多选状态下左边那个圆圈和那个对勾还是没弄好,我的处理方法是:重写cell的edit方法

[plain] view plaincopy
  1. -(void)setEditing:(BOOL)editing animated:(BOOL)animated
  2. {
  3. if (editing)//编辑状态
  4. {
  5. if (self.editingStyle == (UITableViewCellEditingStyleInsert|UITableViewCellEditingStyleDelete)){ //编辑多选状态
  6. if (![self viewWithTag:TagVale])  //编辑多选状态下添加一个自定义的图片来替代原来系统默认的圆圈,注意这个图片在选中与非选中的时候注意切换图片以模拟系统的那种效果
  7. {
  8. UIImage* img = [UIImage imageNamed:@"dot.png"];
  9. UIImageView* editDotView = [[UIImageView alloc] initWithImage:img];
  10. editDotView.tag = TagVale;
  11. editDotView.frame = CGRectMake(10,15,20,20);
  12. [self addSubView:editDotView];
  13. [editDotView release],editDotView = nil;
  14. }
  15. }
  16. }
  17. else {
  18. //非编辑模式下检查是否有dot图片,有的话删除
  19. UIView* editDotView = [self viewWithTag:TagValue];
  20. if (editDotView)
  21. {
  22. [editDotView removeFromSuperview];
  23. }
  24. }
  25. }

注意这里我们需要自己调整设置dot图片的位置,因为我这个cell是50高度,所以这么写,综上所述,当你需要自定义一个多选编辑状态而又不需要自己去完全自定义一个控件时,多修改下tableview的一些属性,多结合重写cell的select,edit,highlight等方法即可以获得相应的效果。今天到此为止

创建操作/删除多行数据的UITableView的细节相关推荐

  1. java向Word模板中替换书签数据,插入图片,插入复选框,插入Word中表格的行数据,删除表格行数据

    java向Word模板中替换书签数据,插入图片,插入复选框,插入Word中表格的行数据,删除表格行数据 使用插件:spire.doc 创建工具类,上代码: import com.spire.doc.D ...

  2. R删除冗余行数据基于dplyr包

    R删除冗余行数据基于dplyr包 目录 R删除冗余行数据基于dplyr包 删除完全重复的行 删除一列中的重复项

  3. Excel如何间隔删除整行数据

    今天跟大家分享一下Excel如何间隔删除整行数据 1.如下图表格数据表头重复,现在我们想要快速将多余的表头删除 2.首先我们选中C3:F16单元格区域(从要删除的第一行开始选择) 3.然后点击下图选项 ...

  4. python删除文件某行_python 文件操作删除某行的实例

    python 文件操作删除某行的实例 使用continue跳过本次写循环就可以了 #文本内容 Yesterday when I was young 昨日当我年少轻狂 The tasting of li ...

  5. 2019-7-26 [MySQL] 安装与介绍 语句分类/语法 数据类型 DDL数据定义:创建/查看/删除/使用 DML数据操作:增删改 主键约束 自动增长列 非空约束 默认值 Navicat

    文章目录 0.知识回顾 1.数据库介绍 1.1 数据库概述 1.1.1 什么是数据库 1.1.2 什么是数据库管理系统 1.1.3 数据库与数据库管理系统的关系 1.2 数据库表 1.3 表数据 1. ...

  6. python 删除特定行数据_怎么用 Python 做数据分析实例

    01 生成数据表 第一部分是生成数据表,常见的生成方法有两种,第一种是导入外部数据,第二种是直接写入数据. Excel 中的文件菜单中提供了获取外部数据的功能,支持数据库和文本文件和页面的多种数据源导 ...

  7. Pandas删除重复行数据

    import pandas as pd df=pd.DataFrame({'m':['dashuaige']*3+['dameinv']*4,'n':[1,1,2,3,3,4,5]}) df['x'] ...

  8. mysql怎样删除上一行_mysql如何删除第一行数据

    我就废话不多说了,大家还是直接看代码吧~create or replace function aa1(a1 integer[],a2 bigint) returns void AS $$declare ...

  9. pandas处理excel删除多行数据

    数据处理前: import pandas as pdio = '员工账号信息.xlsx' data = pd.DataFrame(pd.read_excel(io,sheet_name = '已注册用 ...

最新文章

  1. CA周记 - 用 Visual Studio Code 做基于 .NET MAUI 跨平台移动应用开发
  2. 6 年大厂面试官,谈谈我对算法岗面试的一些看法
  3. 牛客16502 螺旋矩阵
  4. 一个常用的Android工具库
  5. windows下批处理删除文件及注册表项
  6. .第一天.net 学习理论
  7. 软件开发之韵:和谐敏捷
  8. ENVI实验教程(8)实验八、高光谱与光谱分析
  9. R软件和扩展包的升级及R语言数据对象
  10. Android 9.0的One UI系统,三星S9/S9+更新One UI 安卓9.0已正式推送
  11. 固态硬盘分为哪几种_通俗易懂 SSD固态硬盘接口有哪几种类型的图解
  12. Python 面试问题总结
  13. 《电感元器件》的特性分析
  14. 国家开发银行软件测试工资待遇,国家开发银行总行工资待遇
  15. linux 下vim中关于删除某段,某行,或全部删除的命令
  16. 华为 Telnet aaa认证模式
  17. 魔兽世界运营时间线timeLine(2004-2014)
  18. 【大数进制转换】清华大学考研复试上机——进制转换(10—2)
  19. Jenkins密码忘记重置方法
  20. 使用暴风激活后首页被劫持

热门文章

  1. 【Python】解析Python中类的使用
  2. 梦断代码阅读笔记03
  3. [bzoj1054][HAOI2008]移动玩具
  4. PHP 设计模式 笔记与总结(9)数据对象映射模式
  5. datagridview 点击列标题排序
  6. 4月《程序员》上我讲HTML5的文章---激动人心的HTML5之美
  7. SAP的安装后基本设定
  8. PHP一些十分严重的缺陷
  9. Asp.Net下通过切换CSS换皮肤
  10. 只要你敢进来,没有学不会xml滴