使用TableView自带的多选功能

原创 2018年04月17日 19:53:59

一、简单实现

1.设置tableView属性

self.tableView.allowsMultipleSelectionDuringEditing = YES; 

2.然后在编辑按钮显示tableView编辑状态

[self.tableView setEditing:YES animated:YES]; 

3.查看被选中cell的indexPath数组

NSArray *indexs = self.tableView.indexPathsForSelectedRows;

二、实战使用

功能要求:

1.点击多选按钮,进入多选模式

2.满足条件的才会出现多选项(部分cell多选)

3.多选状态下,选中和取消都要获取(实时计算选中cell中某个值的总和,以及选中数量)

实现:

1.简单方法无法实现部分多选,所以用另一种方法进入编辑模式

不需要设置

self.tableView.allowsMultipleSelectionDuringEditing = YES; 

实现两个代理方法

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
    if (indexPath.row < 5) {
        return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
    }else{
        return UITableViewCellEditingStyleNone;
    }
}

ps:row<5 的显示系统自带的多选图标,否则不显示


- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row < 5) {
        return YES;
    } else {
        return NO;
    }
}
ps :row<5 的会有cell向右移动,出现多选按钮的动作,否则没有动作,不会出现多选按钮


2.在选中cell的代理方法中,如果在编辑状态则处理选中事件,否则跳转其他页面

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    // 编辑状态返回
    if (tableView.isEditing) {
        NSArray *indexs = tableView.indexPathsForSelectedRows;
        for (NSIndexPath *index in indexs) {
            // 可以取到所有选中cell的index
        }
        return;
    }
   // 正常cell点击动作
}

3、编辑状态如果取消选择的话不会进入上面方法,需要单独处理取消事件

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
     NSLog(@"取消 - %ld",indexPath.row);
}

三、其他设置

1、自带按钮颜色设置

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    // ...
     directCell.tintColor = MainTone;
   // ...
}

2.判断是否在编辑状态(可用于编辑状态 是/否 切换),返回BOOL值

tableView.isEditing

3.自定义多选按钮(cell中实现)

-(void)layoutSubviews
{
    for (UIControl *control in self.subviews){
        if ([control isMemberOfClass:NSClassFromString(@"UITableViewCellEditControl")]){
            for (UIView *v in control.subviews)
            {
                if ([v isKindOfClass: [UIImageView class]]) {
                    UIImageView *img=(UIImageView *)v;
                    if (self.selected) {
                        img.image=[UIImage imageNamed:@"xuanzhong_icon"];
                    }else
                    {
                        img.image=[UIImage imageNamed:@"weixuanzhong_icon"];
                    }
                }
            }
        }
    }
    [super layoutSubviews];
}
//适配第一次图片为空的情况
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];
    for (UIControl *control in self.subviews){
        if ([control isMemberOfClass:NSClassFromString(@"UITableViewCellEditControl")]){
            for (UIView *v in control.subviews)
            {
                if ([v isKindOfClass: [UIImageView class]]) {
                    UIImageView *img=(UIImageView *)v;
                    if (!self.selected) {
                        img.image=[UIImage imageNamed:@"weixuanzhong_icon"];
                    }
                }
            }
        }
    }
}

4.取消选择

[tableView deselectRowAtIndexPath:indexPath animated:YES];

四、坑

千万不要设置

cell.selectionStyle = UITableViewCellSelectionStyleNone;












版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/github_32300233/article/details/79979395

ios 简单实现tableView单选和多选功能

ios 简单实现tableView单选和多选功能
  • dashenid
  • dashenid
  • 2017-11-24 18:02:24
  • 72

tableView自带的多选功能

  • 2015年08月27日 13:58
  • 35KB
  • 下载

关于tableView多选删除的编辑设置

-(void)editAction:(UIButton*)sender {     [self.tableView setEditing:YES animated:YES]...
  • taylorlannister
  • taylorlannister
  • 2016-06-06 14:01:10
  • 1339

iOS tableView多选,全选

实现了多个分组的卷展显示,单行选择及分组全选的功能 首先定义需要是用到的几个数组及tableview [objc] view plain copy   ...
  • xttttttttt
  • xttttttttt
  • 2017-04-19 09:46:28
  • 653

ios tableViewCell 数组方式 全选、多选的删除

typedef NS_ENUM(NSUInteger, EditTypes) {     // 删除状态     deleteForEditTypes = 0,     // 编辑状态    ...
  • zhaochunyang_0726
  • zhaochunyang_0726
  • 2015-01-05 16:50:53
  • 1074

关于iOS`UITableViewCell 使用系统 多选 全选问题

最近做一个项目,要用到UITableView中cell的多选和全选。  上网简单一搜索,发现很多小伙伴对于这块是自己自定义cell且通过代码判断,再去改变UI来实现。很多方法的理论基础基本上都是...
  • TF_guo
  • TF_guo
  • 2016-06-02 16:23:59
  • 11883

##TableView实现多选,并限制选择个数

TableView实现多选,并限制选择个数 今天帮同学倒腾了了这个需求,由于手生,弄了快一个小时才完全弄好。因此记录下来,涨涨经验。 如题:要实现tableView的多选,并要限制个数N。 思路:...
  • amoslyc
  • amoslyc
  • 2016-03-30 10:30:27
  • 3259

UI - 修改tableView多选默认蓝色选中按钮 , 全选 , 取消全选

经常会有需求 , 更改tableView多选的默认按钮颜色 , 默认为蓝色 , 很多情况下可能会根据自己项目的主题色进行修改 . 简单粗暴 , 直接上代码 . 重写Cell的布局方法 , 依次遍历...
  • coderMy
  • coderMy
  • 2016-12-01 09:35:50
  • 1953

实现tableView多选功能及出现问题解决

// - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:...
  • zttjhm
  • zttjhm
  • 2014-07-11 17:12:11
  • 11667

自定义tableViewCell和设置多选

TableView.m 头文件 #import @interface SmallKindsTableVC : UITableViewController -(void)setNavigato...
  • u012765274
  • u012765274
  • 2015-09-01 18:20:17
  • 2519
收藏助手
不良信息举报
您举报文章:使用TableView自带的多选功能
举报原因:
原因补充:

(最多只允许输入30个字)