前言:

  很多入门不久的程序员或许都会遇到系统自带的tableview多选时cell选择时不能选择自己想要的点击时的颜色或者图片,这让初级开发者们很烦恼。今天,我试着花了几个小时的时间用了自己的想法,去做了自定义的tableview的多选,仅供参考使用,如有觉得写的不好的,可以随时交流,谢谢。


1.自定义cell,假设cell总共有三个控件;

  (1)_selecedImgIcon则为设置多选时才出现的我们所想自定义的selected控件,设置这个控件时需要把它设置在视图左边,点击多选时向右推才出现

  _selecedImgIcon.frame   = CGRectMake(-48 * Scale_width, 56 * Scale_heigh, 46 * Scale_heigh, 46 * Scale_heigh);

  

 _noteImageV.frame       = CGRectMake(22 * Scale_width, 38 * Scale_heigh, 82 * Scale_heigh, 82 * Scale_heigh);

 _noteTittle.frame       = CGRectMake(124 * Scale_width, 42 * Scale_heigh, 200 * SCALEX, 30 * Scale_heigh);

 _noteTime.frame         = CGRectMake(124 * Scale_width, 96 * Scale_heigh, 200 * SCALEX, 20 * Scale_heigh);

  由于cell的contentView是只读的,不可以改变其frame,因此,需要在contentView上加一个contentV,把所有需要用的控件都放在上面,需要多选时再将contentV向左推,将多选时的控件显示出来。所以记得selected控件的x一定要置于左端,即x坐标要是负的

2.声明一个bool属性的editing,初始时为NO;

  BOOL _editing;

  _editing = NO;

3.添加一个多选的button,为button添加一个target;

  @selector(onMultipleChoice)

4.实现onMultipleChoice这个方法;(记得先设置好未选择时的图片)

  // 设置多选时contentV的x需要往右移多少才能将cell推出来(自己算)

  float contentX = editing ? 70 * Scale_width : 0;

  // 获取所有的cell,并设置动画效果将cell推出

  for (int i = 0; i < _array.count; i ++)

   {  // 这里假设只有一个section

NoteTableViewCell *cell = [_tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];

[UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{

cell.contentV.frame  = CGRectMake(contentX, 0, cell.contentView.frame.size.width, cell.contentView.frame.size.height);

NSLog(@"%f",cell.contentView.center.x);

[cell layoutIfNeeded];

} completion:^(BOOL finished) {

}];

}

5.实现两个tableview的代理方法:分别为选中时和未选中时;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

  /**********

  此处写选中时的数据操作

  ***********/

if (_editing)

{

_cell = [tableView cellForRowAtIndexPath:indexPath];

_cell.selecedImgIcon.image  = [UIImage imageNamed:@"privacy_selected02"];

return;

}

}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0)

{

  /**********

  此处写未选中时的数据操作

  ***********/

_cell = [tableView cellForRowAtIndexPath:indexPath];

_cell.selecedImgIcon.image  = [UIImage imageNamed:@"privacy_selected01"];

}

6.实现后如图所示:

7.结语:

  希望各位大神们,看了有什么想法或有什么建议的可以跟我聊聊,我相信交流永远是成长最快的。

如何对tableview进行自定义多选的更多相关文章

  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. iPhone实现自定义多选列表

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

  7. UITableView 自定义多选

    前言 在上一篇文章中介绍了UITableView的多选操作,有提到将 return UITableViewCellEditingStyleDelete | UITableViewCellEditing ...

  8. [IOS Tableview] cell自定义view显示错误问题

    问题介绍:按照tableviewcell的tag自定义cell的view显示的时候,会出现拖动时显示错误情况(在Tableview的范围超出屏幕范围需要滑动的情况下). 我做的是一个下载界面,我为了简 ...

  9. jQuery自定义多选下拉框

    项目中需要自定义一个下拉框多选插件,业务问题还是自己实现比较好 通过$.fn 向jQuery添加新的方法 下拉数据通过参数传递进去,通过调用该插件时接收,选择后的确定与取消事件采用事件传递方式 代码如 ...

随机推荐

  1. kali python pip3 的安装和卸载

    今天很高兴安装完成调整了kali 然后看见kali已经帮助我安装了python2.7和python3.5可把我开心坏了,可是2.7有pip,而且包很全,但2.7与3.0切换使用我的就尴尬了 最后在su ...

  2. ListView加载性能优化---ViewHolder---分页

    ListView是Android中一个重要的组件,可以使用它加列表数据,用户可以自己定义列表数据,同时ListView的数据加载要借助Adapter,一般情况下要在Adapter类中重写getCoun ...

  3. js创建命名空间

    CreateNameSpace: function () { var nameSpaceObjec = arguments[0].split('.'); var currentNameSpaceNam ...

  4. [原创]用命令行工具删除TFS2010服务器上的工作区信息

    下面的示例显示有关所有计算机上的所有用户已在地址 http://myserver:8080/tfs/DefaultCollection 上的以下团队项目集合中创建的所有工作区的列表. c:\proje ...

  5. mysql高并发和表类型

    高并发:http://www.cnblogs.com/wangchaozhi/p/5061378.html 表类型:http://www.xiaoxiaozi.com/2009/07/14/1171/

  6. Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》

    首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结 ...

  7. 关于 android 的setOnItemClickListener 和 setOnItemLongClickListener 同时触发的解决方法

    关于 android 的setOnItemClickListener 和 setOnItemLongClickListener 同时触发的解决方法. 其实方法也是很简单 的主要 setOnItemLo ...

  8. Lintcode 157. 判断字符串是否没有重复字符

    ------------------------ 因为字符究竟是什么样的无法确定(比如编码之类的),恐怕是没办法假设使用多大空间(位.数组)来标记出现次数的,集合应该可以但感觉会严重拖慢速度... 还 ...

  9. Yii2 事务操作

    官网关于Yii2 事务的说明文档 http://www.yiiframework.com/doc-2.0/guide-db-active-record.html Working with Transa ...

  10. FABRIC单机开发者模式启动

    在开始之前需要导出一个自定义变量,方便后续操作: export FABRIC=/opt/gopath/src/github.com/hyperledger/fabric/devenv 1.在真机上执行 ...