ios ~ UITableView的删除操作(左滑删除cell)
2021-09-02 本文已影响0人
阳光下的叶子呵
一、概述
UITbableView作为列表展示信息,除了展示的功能,有时会用到删除的功能,比如购物车,视频收藏等。删除功能可以直接使用系统自带的删除功能,当横向向左轻扫cell时,右侧出现红色的删除按钮,点击删除当前cell。
* * ios 11.0之后删除操作:
#pragma mark 右滑cell:
- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos);
#pragma mark 左滑cell:
- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos);
- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath {
if (self.oftenModels.count > 0) {
// 类型: 1 :添加的球场 2:上次选择 3 :离我最近
NSInteger type = self.oftenModels[indexPath.row].type;
if (type == 1) {
//删除
UIContextualAction *deleteRowAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive title:@"删除" handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
/** 点击 删除 按钮的操作 */
if (self.deleteSelectCellBlock) {
self.deleteSelectCellBlock(YES, indexPath.row);
}
}];
deleteRowAction.title = @"删除";
deleteRowAction.backgroundColor = RGBA(223, 109, 53, 1);
UISwipeActionsConfiguration *config = [UISwipeActionsConfiguration configurationWithActions:@[deleteRowAction]];
return config;
} else {
UISwipeActionsConfiguration *config = [UISwipeActionsConfiguration configurationWithActions:@[]];
return config;
}
} else {
UISwipeActionsConfiguration *config = [UISwipeActionsConfiguration configurationWithActions:@[]];
return config;
}
}
二、效果图:
三、只实现这里的前三个方法就可以实现简单的删除操作了:
设置
// “删除” 按钮
-(void)deleteBtn
{
self.tableView.editing = !self.tableView.editing;
}
技术:分析
- 1、让tableView进入编辑状态,即tableView.editing = YES。
// 编辑YES,取消NO
[self.tableView setEditing:YES animated:NO];
- 2、返回编辑模式,即实现UITableViewDelegate中的- tableview:editingStyleForRowAtIndexPath:方法,在里面返回删除模式。如果不实现,默认返回的就是删除模式。
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
// 删除
return UITableViewCellEditingStyleDelete;
}
- 3、提交删除操作,即实现UITableViewDelegate中的- tableview:commitEditingStyle:editing StyleForRowAtIndexPath:方法。只要实现此方法,即默认实现了系统横扫出现删除按钮的删除方法。
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
//只要实现这个方法,就实现了默认滑动删除!!!!!
if (editingStyle == UITableViewCellEditingStyleDelete)
{
// 删除数据
[self DeleteWord:word_id]; // 调用删除接口
//[self.arrData removeObjectAtIndex:sourceRow];// 直接在数组中删掉
// 删除带动画效果
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationLeft];
}
}
- 4、如果想把删除按钮改为中文,可以实现-tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:方法。
-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
return @"删除";
}
四、细节注意:
以下属性必须设置为NO,默认为NO,否则会导致删除模式无效,反而成为多选模式。
tableView.allowsMultipleSelection = NO;
tableView.allowsSelectionDuringEditing = NO;
tableView.allowsMultipleSelectionDuringEditing = NO;
🧶❤️😀