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

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

 UITableViewCellEditingStyleNone,
 UITableViewCellEditingStyleDelete,
 UITableViewCellEditingStyleInsert

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

UITableViewCellEditingStyleNone
UITableViewCellEditingStyleDelete
UITableViewCellEditingStyleInsert

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

tableView 多行选择(附侧滑删除)_第1张图片

没有这个啊....这时候很多人会想到自定义了.其实这个系统也是给写好的.而且对于 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 *)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 多行选择(附侧滑删除)_第2张图片

你可能感兴趣的:(tableView 多行选择(附侧滑删除))