iOS-开发总结

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;
    }
    
}

二、效果图:

IMG_0009.PNG

三、只实现这里的前三个方法就可以实现简单的删除操作了:

设置

// “删除” 按钮
-(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;

🧶❤️😀

上一篇 下一篇

猜你喜欢

热点阅读