前言

在上一篇文章中介绍了UITableView的多选操作,有提到将

return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;

改为

return UITableViewCellEditingStyleDelete & UITableViewCellEditingStyleInsert;

可以实现自定义的多选操作,这次就来实现一下。

第一步:

自定义一个Cell类:UDTableViewCell,在nib中设置好重用标识,重新TableView注册这个nib Cell :

[self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([UDTableViewCell class]) bundle:[NSBundle mainBundle]] forCellReuseIdentifier:reuseIdentifier];

第二步:

在Cell中添加一个选择按钮,如果按钮直接添加到Cell的contentview或Cell上,无法实现想要的效果,请看下图:

iOS Simulator Screen Shot 2015年9月7日 上午10.30.53.png

如上图所示,当UITableView处于多选状态的时候,整个Cell的contentview向右移,露出后面的backgroundView,图中蓝色部分就是backgroundView,我们需要将选择按钮添加到backgroundView上,编辑的时候选择按钮自然就显示出来了。

第三步:

处理选中/取消选中逻辑

Cell.h:

typedef void(^CustomSelectBlock)(BOOL selected, NSInteger row);

@interface UDTableViewCell : UITableViewCell

@property (nonatomic, assign) NSInteger row;

@property (nonatomic, strong) UIButton *btnSelect;

@property (nonatomic, getter=isCustomSelected) BOOL customSelected;

@property (nonatomic, copy) CustomSelectBlock customSelectedBlock;

Cell中添加按钮:

- (void)awakeFromNib {

    UIView *backgroundView = [[UIView alloc] initWithFrame:self.contentView.bounds];
backgroundView.backgroundColor = [UIColor clearColor];
self.backgroundView = backgroundView;
self.contentView.backgroundColor = [UIColor greenColor];
self.btnSelect = [UIButton buttonWithType:UIButtonTypeCustom];
self.btnSelect.frame = CGRectMake( 15, 2, selectButtonSize, selectButtonSize);
self.btnSelect.backgroundColor = [UIColor clearColor];
[backgroundView addSubview:self.btnSelect];
[self.btnSelect setTitle:@"⭕️" forState:UIControlStateNormal];
self.btnSelect.titleLabel.font = [UIFont systemFontOfSize:20];
self.btnSelect.contentEdgeInsets = UIEdgeInsetsMake(5, 5, 5, 5);
[self.btnSelect addTarget:self action:@selector(selectAction:) forControlEvents:UIControlEventTouchUpInside]; }
- (IBAction)selectAction:(id)sender{

_customSelected = !_customSelected;
if ([self.btnSelect.titleLabel.text isEqualToString:@"⭕️"]) {
[self.btnSelect setTitle:@"

UITableView 自定义多选的更多相关文章

  1. WPF自定义控件与样式(8)-ComboBox与自定义多选控件MultComboBox

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 下拉选 ...

  2. c# 自定义多选下拉列表2

    以下为工作中遇到的,备注一下 先需要几个辅助类 #region GripBounds using System.Drawing; internal struct GripBounds { ; ; pu ...

  3. 【转】WPF自定义控件与样式(8)-ComboBox与自定义多选控件MultComboBox

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要内容: 下拉选择控件ComboBox的自定义样式及扩展: 自定义多选控件Mul ...

  4. WPF 自定义ComboBox样式,自定义多选控件

    原文:WPF 自定义ComboBox样式,自定义多选控件 一.ComboBox基本样式 ComboBox有两种状态,可编辑和不可编辑状态.通过设置IsEditable属性可以切换控件状态. 先看基本样 ...

  5. 自定义SWT控件二之自定义多选下拉框

    2.自定义下拉多选框 package com.view.control.select; import java.util.ArrayList; import java.util.HashMap; im ...

  6. 如何对tableview进行自定义多选

    前言: 很多入门不久的程序员或许都会遇到系统自带的tableview多选时cell选择时不能选择自己想要的点击时的颜色或者图片,这让初级开发者们很烦恼.今天,我试着花了几个小时的时间用了自己的想法,去 ...

  7. iOS UITableView的多选

    一些列表经常需要编辑多选的功能,而UITableview自带多选删除的功能,使用起来方便,不需要自己去做数据存储和选中状态转换,可以减少不少开发时间.下面就来介绍下UITableView多选的使用. ...

  8. iPhone实现自定义多选列表

    好久没更新博客了,今天写了一个自定义的多选列表,可以跟爱学习的各位进行分享,首先我们先来看一下效果图: 一般大家都是用UITableView自己的编辑模式来实现CheckBox的,这里我们用自定义Ce ...

  9. UItableView自定义标题(headerView)重用问题

    在实现类似QQ列表的功能时,这样自定义了一个标题headerView 在实现类似QQ列表的功能时,这样自定义了一个标题headerView - (UIView *)tableView:(UITable ...

随机推荐

  1. python中 is 和 == 的区别

    is 是比较两个引用是否指向了同一个对象(引用比较). == 是比较两个对象是否相等.

  2. css-方形边框四角

    项目中遇到下图这种样式,刚开始想切图解决 后来想到更好的解决办法,代码如下: HTML: <div class="BoxWrap"> <div class=&qu ...

  3. MSP430F5529学习记录

    个人学习理解,难免有错,望各位大佬指出错误,不胜感激 有些引脚在单片机上没看到,在原理图上可以找得到,说明这些引脚没有引出来 单片机上的引出的引脚是可以外部操作的,有些不必要引出的就直接在单片机内部 ...

  4. GMA Round 1 YGGDRASIL

    传送门 YGGDRASIL 在YGGDRASIL世界,一年有213天. Demiurge推广种植了一种植物,姑且称之为“黄金果”,它第一期生长需要140天,此后第i期生长需要的天数$a_i$满足$a_ ...

  5. JAVA自学笔记13

    JAVA自学笔记13 1.StringBuffer类 1)线程安全的可变字符序列 线程安全(即同步) 2)StringBuffer与String的区别:一个可变一个不可变 3)构造方法: ①publi ...

  6. sqoop导出到hdfs

    ./sqoop export --connect jdbc:mysql://192.168.58.180/db --username root --password 123456  --export- ...

  7. 利用Vmware 创建Linux虚拟机的方法

    https://blog.csdn.net/qq_34929457/article/details/52663265 使用VMware新建一个Linux系统虚拟机 原创 2016年09月25日 17: ...

  8. linux下修改/dev/shm tmpfs文件系统大小

    默认系统就会加载/dev/shm ,它就是所谓的tmpfs,有人说跟ramdisk(虚拟磁盘),但不一样.象虚拟磁盘一样,tmpfs 可以使用您的 RAM,但它也可以使用您的交换分区来存储.而且传统的 ...

  9. Tomcat参数设置,解决内存溢出问题

    Tomcat默认参数不适合生产环境使用,因此需要修改一些参数 1.修改启动时内存参数.并指定JVM时区 (在Windows Server 2008 下时间少了8个小时): 在Tomcat上运行j2ee ...

  10. Node.js模板引擎的深入探讨

    每次当我想用 node.js 来写一个 web 相关项目的时候.我总是会陷入无比的纠结.原因是 JavaScript 生态圈里的模板引擎实在太多了,但那么多却实在找不出一个接近完美的,所谓完美的概念就 ...