美文网首页@IT·互联网程序员iOS Developer
tableView 多行选择(附侧滑删除)

tableView 多行选择(附侧滑删除)

作者: 明月钓无痕 | 来源:发表于2016-05-31 11:37 被阅读1459次

    在 tableView 中有时候会对其进行增删操作.这里就来看看怎么增删.主要是使用系统的,而不是自定义的.
    对于系统的可编辑状态我们可以看到有三种:

     UITableViewCellEditingStyleNone,
     UITableViewCellEditingStyleDelete,
     UITableViewCellEditingStyleInsert
    

    这三种对应的是那哪种状态呢?

    UITableViewCellEditingStyleNone UITableViewCellEditingStyleDelete UITableViewCellEditingStyleInsert

    这三种是系统给的三种样式,那么有时候我们需要进行多行操作;比如下面的图所示:

    没有这个啊....这时候很多人会想到自定义了.其实这个系统也是给写好的.而且对于 cell 的循环利用问题已经做过处理了.

    下面看一下重点,实现这个多选有两种方法:
    1>使用 tableView 的属性:

    @property (nonatomic) BOOL allowsMultipleSelectionDuringEditing 
    
    

    allowsMultipleSelectionDuringEditing这个属性默认是 NO, 设置成 YES. 就是出现多选.

    2>使用 tableView 的代理方法.我们知道上面代理只有三个选项,没有多选的枚举值.

    - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    // 当我们 使用两个枚举值的按位或时,就会发现多选出现了.
        return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
    }
    

    当然如果需要这种效果,不要忘记设置为可编辑[self setEditing:YES animated:YES];

    注意:
    如果需要自定义多选效果的话,一定要在数据模型中定义是否选中状态.否则 cell 循环利用,会使得选中的行有问题.删数据时要注意的是删除相应数据后,重新刷新一下表格.删除的数据,和删除的表格一定要对应起来.

    附录:
    1> 左滑出现删除按钮

    // 1.确保cell 可以被编辑
    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
        return YES;
    }
    // 2.左滑后点击 delete 之后,会调用下面的方法
    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
        NSLog(@"%@", indexPath);
    }
    
    // 注意:这个方法可以不去写,如果写了必须 return 的是UITableViewCellEditingStyleDelete,否则不会出现侧滑效果
    - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {    
        return UITableViewCellEditingStyleDelete;
    
    }
    
    3.如果希望修改标题的话.
    - (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath {
    // 测试用
      return @"haha";
    }
    
    改变侧滑右侧文字

    由于现在越来越多的新需求产生,很多时候我们侧滑会出多个选项.从 iOS 以后,苹果也有了相应的方法:

    - (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
    // 使用 Block 回调,实现点击后的方法
     UITableViewRowAction *action = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"增加" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
            NSLog(@"%@", indexPath);
        }];
        
        UITableViewRowAction *action1 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"减少" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
            NSLog(@"%@", indexPath);
        }];
    // 苹果的习惯,右侧的多个按钮,显示位置是反着的
        return @[action, action1];
    }
    

    相关文章

      网友评论

        本文标题:tableView 多行选择(附侧滑删除)

        本文链接:https://www.haomeiwen.com/subject/efmcdttx.html