创建操作/删除多行数据的UITableView的细节
首先注意需要重写-(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方法
- -(void)setSelected:(BOOL)selected animated:(BOOL)animated
- {
- if (self.editing)//仅仅在编辑状态的时候需要自己处理选中效果
- {
- if (selected){
- //选中时的效果
- }
- else {
- //非选中时的效果
- }
- }
- }
这样就解决了选中与不选中的效果了。但是还有个问题,就是多选状态下左边那个圆圈和那个对勾还是没弄好,我的处理方法是:重写cell的edit方法
- -(void)setSelected:(BOOL)selected animated:(BOOL)animated
- {
- if (self.editing)//仅仅在编辑状态的时候需要自己处理选中效果
- {
- if (selected){
- //选中时的效果
- }
- else {
- //非选中时的效果
- }
- }
- }
- -(void)setEditing:(BOOL)editing animated:(BOOL)animated
- {
- if (editing)//编辑状态
- {
- if (self.editingStyle == (UITableViewCellEditingStyleInsert|UITableViewCellEditingStyleDelete)){ //编辑多选状态
- if (![self viewWithTag:TagVale]) //编辑多选状态下添加一个自定义的图片来替代原来系统默认的圆圈,注意这个图片在选中与非选中的时候注意切换图片以模拟系统的那种效果
- {
- UIImage* img = [UIImage imageNamed:@"dot.png"];
- UIImageView* editDotView = [[UIImageView alloc] initWithImage:img];
- editDotView.tag = TagVale;
- editDotView.frame = CGRectMake(10,15,20,20);
- [self addSubView:editDotView];
- [editDotView release],editDotView = nil;
- }
- }
- }
- else {
- //非编辑模式下检查是否有dot图片,有的话删除
- UIView* editDotView = [self viewWithTag:TagValue];
- if (editDotView)
- {
- [editDotView removeFromSuperview];
- }
- }
- }
注意这里我们需要自己调整设置dot图片的位置,因为我这个cell是50高度,所以这么写,综上所述,当你需要自定义一个多选编辑状态而又不需要自己去完全自定义一个控件时,多修改下tableview的一些属性,多结合重写cell的select,edit,highlight等方法即可以获得相应的效果。今天到此为止
- -(void)setEditing:(BOOL)editing animated:(BOOL)animated
- {
- if (editing)//编辑状态
- {
- if (self.editingStyle == (UITableViewCellEditingStyleInsert|UITableViewCellEditingStyleDelete)){ //编辑多选状态
- if (![self viewWithTag:TagVale]) //编辑多选状态下添加一个自定义的图片来替代原来系统默认的圆圈,注意这个图片在选中与非选中的时候注意切换图片以模拟系统的那种效果
- {
- UIImage* img = [UIImage imageNamed:@"dot.png"];
- UIImageView* editDotView = [[UIImageView alloc] initWithImage:img];
- editDotView.tag = TagVale;
- editDotView.frame = CGRectMake(10,15,20,20);
- [self addSubView:editDotView];
- [editDotView release],editDotView = nil;
- }
- }
- }
- else {
- //非编辑模式下检查是否有dot图片,有的话删除
- UIView* editDotView = [self viewWithTag:TagValue];
- if (editDotView)
- {
- [editDotView removeFromSuperview];
- }
- }
- }
相关文章:

每天进步一点点——Linux
http://blog.csdn.net/cywosp/article/category/443566/1转载于:https://www.cnblogs.com/zengkefu/p/5586780.html

用Go 构建一个区块链 -- Part 5: 地址
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 比特币地址 这就是一个真实的比特币地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。这是史上第一个比特币地址,据说属于…

iOS 9 适配系列教程
转自:http://www.cocoachina.com/ios/20150703/12392.html 本文是投稿文章,作者:ChenYilong(https://github.com/ChenYilong/iOS9AdaptationTips) Demo1_iOS9网络适配_改用更安全的HTTPS iOS9把所有的http请求都改为ht…

AutoMocker单元测试
/// <summary>/// 测试获取所有物流/// </summary>[TestMethod]public void TestExpressController(){var Expresss new List<Express> { new Express{Code"01",Name"测试物流"}}.AsQueryable();var mocker new AutoMocker();mocker.U…

CSS.text不被选中
1、 text{-moz-user-select: none; /*火狐*/-webkit-user-select: none; /*webkit浏览器*/-ms-user-select: none; /*IE10*/-khtml-user-select: none; /*早期浏览器*/-o-user-select: none; /* Opera*/user-select: none;} 2、user-select - CSS3参考手册.html(htt…

一个Solidity源文件的布局
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 源文件可以包含任意数量的合约定义,include指令和pragma伪指令。 Pragma 版本 源文件可以(并且应该)使…

iOS 数字滚动 类似于老 - 虎- 机的效果
效果图 具体实现代码如下 ZCWScrollNumView.h文件 #import <UIKit/UIKit.h>typedef enum {ZCWScrollNumAnimationTypeNone,ZCWScrollNumAnimationTypeNormal,ZCWScrollNumAnimationTypeFromLast,ZCWScrollNumAnimationTypeRand,ZCWScrollNumAnimationTypeFast } ZCWScro…

序列化模块--json模块--pickle模块-shelve模块
什么叫序列化? 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传播到远程,因为硬盘或网络传输时只能接受bytes 例: 把内存数据 转成字符 # data {# roles:[# {role:monster,type:pip,life:5…

UITextView添加占位字符
#import "YGTextView.h"#define kPlaceholderDefaultTopMargin 4 // Placeholder上下间距#define kPlaceholderDefaultLeftMargin 5 // Placeholder左右间距implementation YGTextView#pragma mark - 初始化PlaceholderTextView- (instancetype)initWithFrame…

手把手教你搭建智能合约测试环境、开发、编译、部署以及如何通过JS调用合约方法
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 学习目标 了解智能合约 简单环境搭建 能够利用solidity编写Hello World合约 合约部署 和合约互动 使用solidity语言撰写智能合约 …

洛谷P3159 [CQOI2012]交换棋子
巧妙的拆点方式,首先把1看成黑点,0看成空的,几次交换就可以看成一条路径 1)从容量上看,这条路径为1-2-2-2-2-2-……-2-1 2)从费用上看,这条路径每条边费用都是1 于是用一种巧妙的拆点方式&#…

趣谈iOS运行时的方法调用原理
一个成熟的计算机语言必然有丰富的体系,复杂的容错机制,处理逻辑以及判断逻辑。但这些复杂的逻辑都是围绕一个主线丰富和展开的,所以在学习计算机语言的时候,先掌握核心,然后了解其原理,明白程序语言设计的…

GCD实现倒计时
__block int timeout59; //倒计时时间dispatch_queue_t queue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_source_t _timer dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);dispatch_source_set_timer(_timer,dispatch_wall…

Solidity基础入门知识(十)函数的访问权限和可见性
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 下面来继续介绍作为一个分布式网络语言所特有的internal和external这两种不同的函数调用方式,以及Solidity提供的对函数调用时的…

Sass (Syntactically Awesome StyleSheets)
Sass (Syntactically Awesome StyleSheets) Sass 是对 CSS 的扩展,让 CSS 语言更强大、优雅。 它允许你使用变量、嵌套规则、 mixins、导入等众多功能, 并且完全兼容 CSS 语法。 Sass 有助于保持大型样式表结构良好, 同时也让你能够快速开始小…

键盘的相关设置
一、键盘风格 UIKit框架支持8种风格键盘。 typedef enum { UIKeyboardTypeDefault, // 默认键盘:支持所有字符 UIKeyboardTypeASCIICapable, // 支持ASCII的默认键盘 UIKeyboardTypeNumbersAndPunctuation, // 标准电…

python全栈开发基础【第十七篇】面向对象反射和内置方法
一、静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直…

区块链笔记分享
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 区块链笔记分享:技术和数学基础: 高位的hash的逆向过程除了穷举,没有更有效的办法,这个过程在目前的计算能力下必然…

BZOJ4766: 文艺计算姬
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 737 Solved: 402[Submit][Status][Discuss]Description "奋战三星期,造台计算机"。小W响应号召,花了三星期造了台文艺计算姬。文艺计算姬比普通计算机有更多的艺术细胞。普通计算机能计算一个…

Android调用远程Service的参数和返回值都需要实现Parcelable接口
import android.os.Parcel;import android.os.Parcelable; public class Person implements Parcelable{ private Integer id; private String name; private String pass; public Person() { super(); } public Person(Integer id, String name, …

git的简单命令
git init 初始化管理库 git add file_name 将文件添加到文件管理库 git commit -m “xxx” 将文件提交到文件管理库(xxx:说明文字) git status 查看当前状态 git diff 查看文件改动的地方 git log 查看历史版本提交记录(如果觉…

区块链概念:Hash 算法
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 区块链概念1:Hash 算法 作用在学习哈希算法前,我们需要知道哈希在区块链的作用哈希算法的作用如下:区块…

java 文件操作
文件操作——File File表示目录信息 listFiles方法 File的listFiles方法用于返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。其方法定义: File[] listFiles()返回值:抽象路径名数组,这些路径名表示此抽象路径名表示的…

三维等值面提取算法(Dual Contouring)
上一篇介绍了Marching Cubes算法,Marching Cubes算法是三维重建算法中的经典算法,算法主要思想是检测与等值面相交的体素单元并计算交点的坐标,然后对不同的相交情况利用查找表在体素单元内构建相应的网格拓扑关系。Marching Cubes算法简单&a…

设置status bar的颜色
statusBar显示电池电量、时间、网络部分标示的颜色只能设置两种颜色: 默认的黑色(UIStatusBarStyleDefault)白色(UIStatusBarStyleLightContent) 配置info.plist文件 1.View controller-based status bar appearance…

EOS与以太坊有哪些区别?
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 以太坊是一个专门为开发和运行去中心化应用(DAPP)搭建的智能合约平台;EOS与以太坊类似,同样…

Quartz 2D基本图形的绘制
基本步骤: 1.获取绘图上下文 2.创建并设置路径 3.将路径添加到上下文 4.设置上下文状态 5.绘制路径 6.释放路径 #import "YGView.h" //屏幕尺寸#define kScreenSize [UIScreen mainScreen].bounds.size//屏幕宽高定义#define kscreenWidth [[UIScr…

命令行程序增加 GUI 外壳
Conmajia © 2012 Updated on Feb. 21, 2018 命令行大家都用过: 图 1 命令行程序工作界面 现在想办法为它做一个 GUI 外壳,实际效果参考图 2. 图 2 带 GUI 外壳的命令行程序 程序思路是这样的: 通过运行 cmd.exe 来操作命令行,…

人月神话阅读笔记07
第1章 焦油坑焦油坑的意思说明了即使你足够强大,也无法摆脱束搏而沉到坑底。IT项目也是这样,不论是开发大型软件系统还是小型项目,都会遇到诸多复杂的问题和影响因素,项目本身就是一个足够复杂的动态系统,没有最优&…

区块链隐私:交易还是计算?
链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载。 区块链隐私:交易还是计算? 隐私”是什么意思?在区块链生态系统中,“隐私”这个词被用于许多不同的语…