推广

iOS 自定义左滑/侧滑删除,适配 iOS13 以上版本

iseeyu2年前 (2024-02-21)推广142

image

当时接到这个需求的时候也在网上查找了很多资料,非常感谢这篇文章带给我的灵感
iOS cell自定义左滑/侧滑删除(支持iOS11)

但iOS13 以上的系统左滑控件的层级以及类名都发生了变化,以前的方法明显不够用了,通过不断的断点分析,类名输出后终于正确的适配上了 iOS13,特在此记录一下

1. 定义左滑出来的控件方法

- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
    // 这里的标题我使用的 4 个空格进行占位
    UITableViewRowAction *action = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"    " handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
        // 点击删除按钮需要执行的方法

        [tableView setEditing:NO animated:YES];
    }];

    // 修改背景颜色
    action.backgroundColor = hexColor(0xEB1163);

    return @[action];
}

2. 监听即将开启编辑状态的事件

- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    // 在 iOS11 以下系统,因为方法线程问题,需要放到主线程执行, 不然没有效果
    dispatch_async(dispatch_get_main_queue(), ^{
        [self setupSlideBtnWithEditingIndexPath:indexPath];
    });
}

3.设置左滑出来的按钮样式

//MARK: 设置左滑按钮的样式
- (void)setupSlideBtnWithEditingIndexPath:(NSIndexPath *)editingIndexPath {

    // 判断系统是否是 iOS13 及以上版本
    if (@available(iOS 13.0, *)) {
        for (UIView *subView in self.tableView.subviews) {
            if ([subView isKindOfClass:NSClassFromString(@"_UITableViewCellSwipeContainerView")] && [subView.subviews count] >= 1) {
                // 修改图片
                UIView *remarkContentView = subView.subviews.firstObject;
                [self setupRowActionView:remarkContentView];
            }
        }
        return;
    }

    // 判断系统是否是 iOS11 及以上版本
    if (@available(iOS 11.0, *)) {
        for (UIView *subView in self.tableView.subviews) {
            if ([subView isKindOfClass:NSClassFromString(@"UISwipeActionPullView")] && [subView.subviews count] >= 1) {
                // 修改图片
                UIView *remarkContentView = subView;
                [self setupRowActionView:remarkContentView];
            }
        }
        return;
    }

    // iOS11 以下的版本
    MTMineCollectionTableViewCell *cell = [self.tableView cellForRowAtIndexPath:editingIndexPath];
    for (UIView *subView in cell.subviews) {
        if ([subView isKindOfClass:NSClassFromString(@"UITableViewCellDeleteConfirmationView")] && [subView.subviews count] >= 1) {
            // 修改图片
            UIView *remarkContentView = subView;
            [self setupRowActionView:remarkContentView];
        }
    }
}

- (void)setupRowActionView:(UIView *)rowActionView {
    // 切割圆角
    [rowActionView cl_setCornerAllRadiusWithRadiu:20];
    // 改变父 View 的frame,这句话是因为我在 contentView 里加了另一个 View,为了使划出的按钮能与其达到同一高度
    CGRect frame = rowActionView.frame;
    frame.origin.y += kFitRealValue(7);
    frame.size.height -= kFitRealValue(13);
    rowActionView.frame = frame;
    // 拿到按钮,设置图片
    UIButton *button = rowActionView.subviews.firstObject;
    [button setImage:kImageName(@"delete_col") forState:UIControlStateNormal];
    [button setTitle:@"" forState:UIControlStateNormal];
}

到这里我们就已经实现我们需要的效果了,但是在 iOS13 以上,有时候快速左滑/侧滑时并不能执行

  • (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath;

方法,所以会自定义不了按钮,但是轻轻滑动却能执行,目前不清楚是什么原因,希望知道的大佬能告诉一下,谢谢。

如果这篇文章对您有帮助,希望可以动下小手点个赞,谢谢

作者:Charlin丶
链接:https://www.jianshu.com/p/584edd9e6f46
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/56799.html

相关文章

对话中信银行王洪栋:财富管理进入平权时代,商业银行如何破题?

南方财经全媒体见习记者 杨希 北京报道中信银行正在加速向以“财富管理”为牵引的转型,打造大财富管理强核能力。中信银行将财富管理定位于新零售“体中之核”,并在去年末完成重大组织架构调整,新设财富管理部,负责牵头推动全行财富管理业务。对于中信银行这一重大调整有诸多关切。整合成立...

淘宝店铺详情页抄袭违规么(怎么举报店铺抄袭)

淘宝店铺详情页抄袭违规么(怎么举报店铺抄袭)

淘宝是不允许卖家出现第三方联系方式的。有不少卖家可能会抱着侥幸的心理在详情页中添加一些外链或是微信、手机号这些方式,一旦被抽检了,就是违规了。...

老赖借钱不还将房产转移女儿名下,被拘后马上偿还10.5万

发布会现场 南充中院 供图5月22日,四川省南充市中级人民法院、南充市人民检察院、南充市公安局联合召开打击拒执犯罪新闻发布会,通报5例涉“拒执”犯罪典型案例。澎湃新闻(www.thepaper.cn)从发布会上获悉,有“老赖”得知法院冻结其近两万元银行存款后,急忙将房屋转移...

线上推广渠道越多,活动效果越好吗?

线上推广渠道越多,活动效果越好吗?

  先回答标题的问题:错!大错特错!我们真正需要的,是能给我们带来大批有效流量的渠道,否则渠道多而无用,也只是把钱往水里扔。 每次开始营销推广之前,都得想好在什么渠道进行组合投放,是让微博大V带话题转发?买一个10W+公众号的二条广告位?去知乎假装回答问题实际夹带私货? 接...

拼多多直播如何放视频?深度解析直播视频技巧

拼多多直播如何放视频?深度解析直播视频技巧

随着互联网的发展,电商平台的竞争也愈发激烈。拼多多作为其中的一匹黑马,其直播功能吸引了大量商家和用户。但是,很多新手商家在拼多多直播时,对于如何在直播中放视频感到困惑。本文将为你揭秘拼多多直播放视频的技巧,让你轻松掌握直播视频的奥秘。 一、拼多多直播放视频的重要性 在拼多多直播中放...

品类罗盘标准版多少钱(最标准罗盘多少钱一个)

品类罗盘标准版多少钱(最标准罗盘多少钱一个)

基础版:免费,但是要订购后才可以使用,标准版和专业版的价格要依据最近365天支付子订单数来看。...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片