在 tableView 中有时候会对其进行增删操作.这里就来看看怎么增删.主要是使用系统的,而不是自定义的.
对于系统的可编辑状态我们可以看到有三种:
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 *)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];
}