UITableView 自定义多选
前言
在上一篇文章中介绍了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上,无法实现想要的效果,请看下图:
如上图所示,当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 自定义多选的更多相关文章
- WPF自定义控件与样式(8)-ComboBox与自定义多选控件MultComboBox
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 下拉选 ...
- c# 自定义多选下拉列表2
以下为工作中遇到的,备注一下 先需要几个辅助类 #region GripBounds using System.Drawing; internal struct GripBounds { ; ; pu ...
- 【转】WPF自定义控件与样式(8)-ComboBox与自定义多选控件MultComboBox
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要内容: 下拉选择控件ComboBox的自定义样式及扩展: 自定义多选控件Mul ...
- WPF 自定义ComboBox样式,自定义多选控件
原文:WPF 自定义ComboBox样式,自定义多选控件 一.ComboBox基本样式 ComboBox有两种状态,可编辑和不可编辑状态.通过设置IsEditable属性可以切换控件状态. 先看基本样 ...
- 自定义SWT控件二之自定义多选下拉框
2.自定义下拉多选框 package com.view.control.select; import java.util.ArrayList; import java.util.HashMap; im ...
- 如何对tableview进行自定义多选
前言: 很多入门不久的程序员或许都会遇到系统自带的tableview多选时cell选择时不能选择自己想要的点击时的颜色或者图片,这让初级开发者们很烦恼.今天,我试着花了几个小时的时间用了自己的想法,去 ...
- iOS UITableView的多选
一些列表经常需要编辑多选的功能,而UITableview自带多选删除的功能,使用起来方便,不需要自己去做数据存储和选中状态转换,可以减少不少开发时间.下面就来介绍下UITableView多选的使用. ...
- iPhone实现自定义多选列表
好久没更新博客了,今天写了一个自定义的多选列表,可以跟爱学习的各位进行分享,首先我们先来看一下效果图: 一般大家都是用UITableView自己的编辑模式来实现CheckBox的,这里我们用自定义Ce ...
- UItableView自定义标题(headerView)重用问题
在实现类似QQ列表的功能时,这样自定义了一个标题headerView 在实现类似QQ列表的功能时,这样自定义了一个标题headerView - (UIView *)tableView:(UITable ...
随机推荐
- python中 is 和 == 的区别
is 是比较两个引用是否指向了同一个对象(引用比较). == 是比较两个对象是否相等.
- css-方形边框四角
项目中遇到下图这种样式,刚开始想切图解决 后来想到更好的解决办法,代码如下: HTML: <div class="BoxWrap"> <div class=&qu ...
- MSP430F5529学习记录
个人学习理解,难免有错,望各位大佬指出错误,不胜感激 有些引脚在单片机上没看到,在原理图上可以找得到,说明这些引脚没有引出来 单片机上的引出的引脚是可以外部操作的,有些不必要引出的就直接在单片机内部 ...
- GMA Round 1 YGGDRASIL
传送门 YGGDRASIL 在YGGDRASIL世界,一年有213天. Demiurge推广种植了一种植物,姑且称之为“黄金果”,它第一期生长需要140天,此后第i期生长需要的天数$a_i$满足$a_ ...
- JAVA自学笔记13
JAVA自学笔记13 1.StringBuffer类 1)线程安全的可变字符序列 线程安全(即同步) 2)StringBuffer与String的区别:一个可变一个不可变 3)构造方法: ①publi ...
- sqoop导出到hdfs
./sqoop export --connect jdbc:mysql://192.168.58.180/db --username root --password 123456 --export- ...
- 利用Vmware 创建Linux虚拟机的方法
https://blog.csdn.net/qq_34929457/article/details/52663265 使用VMware新建一个Linux系统虚拟机 原创 2016年09月25日 17: ...
- linux下修改/dev/shm tmpfs文件系统大小
默认系统就会加载/dev/shm ,它就是所谓的tmpfs,有人说跟ramdisk(虚拟磁盘),但不一样.象虚拟磁盘一样,tmpfs 可以使用您的 RAM,但它也可以使用您的交换分区来存储.而且传统的 ...
- Tomcat参数设置,解决内存溢出问题
Tomcat默认参数不适合生产环境使用,因此需要修改一些参数 1.修改启动时内存参数.并指定JVM时区 (在Windows Server 2008 下时间少了8个小时): 在Tomcat上运行j2ee ...
- Node.js模板引擎的深入探讨
每次当我想用 node.js 来写一个 web 相关项目的时候.我总是会陷入无比的纠结.原因是 JavaScript 生态圈里的模板引擎实在太多了,但那么多却实在找不出一个接近完美的,所谓完美的概念就 ...