iOS系统左滑删除

3,252 阅读1分钟

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。

前言

整理一下UITableview的cell左滑删除的注意点,实现一个简单的左滑删除功能。整理的过程也是一个回归的过程,有时候一些功能很久没写就忘记了系统的实现方法。

iOS11之前的editActionsForRowAtIndexPath方法暂时不去适配,可以自行了解去适配iOS10版本

iOS11新增的系统侧滑方法

ios11新增的方法支持图片和文字侧滑样式, 默认的样式是图片在上,文字在下。滑动操作这里还有一个需要注意的是,当cell高度较小时,会只显示image,不显示title,当cell高度够大时,会同时显示image和title。

// Swipe actions
// These methods supersede -editActionsForRowAtIndexPath: if implemented
// return nil to get the default swipe actions
- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos);
- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos);

image.png

不同系统版本对左滑样式的处理

/// 设置左滑菜单按钮的样式
- (void)setupSlideBtn {
    if (@available(iOS 13.0, *)) {
        for (UIView *subView in self.detailTableView.subviews) {
            if ([subView isKindOfClass:NSClassFromString(@"_UITableViewCellSwipeContainerView")] && [subView.subviews count] >= 1) {
                UIView *remarkContentView = subView.subviews.firstObject;
                [self setupRowActionViewInit: remarkContentView];
            }
        }
        return;
    }
    if (@available(iOS 11.0, *)) {
        for (UIView *subView in self.detailTableView.subviews) {
            if ([subView isKindOfClass:NSClassFromString(@"UISwipeActionPullView")] && [subView.subviews count] >= 1) {
                UIView *remarkContentView = subView;
                remarkContentView.backgroundColor = [UIColor clearColor];
                [self setupRowActionViewInit: remarkContentView];
            }
        }
        return;
    }
    // iOS11 以下的版本
    UITableViewCell *cell = [self.detailTableView cellForRowAtIndexPath:self.editingIndexPath];
    for (UIView *subView in cell.subviews) {
        if ([subView isKindOfClass:NSClassFromString(@"UITableViewCellDeleteConfirmationView")] && [subView.subviews count] >= 1) {
            UIView *remarkContentView = subView;
            [self setupRowActionViewInit:remarkContentView];
        }
    }
}

自定义cell高度时左滑样式处理

左滑删除的系统样式默认是cell的高度,当在cell显示的View和cell本身高度不等高时候需要处理

image.png

demo链接

参考链接

juejin.cn/post/684490… iOS 自定义左滑/侧滑删除,适配 iOS13 以上版本