IOS tableViewCell左滑自定义删除按钮

本文介绍了三种方法实现iOS tableViewCell自定义左滑删除按钮。第一种方法涉及不同系统下的层级修改,第二种利用tableView协议,第三种直接在复用cell中覆盖系统删除视图。提供了代码示例和实现思路。

自定义删除

先给大家看看效果图

在这里插入图片描述
在这里插入图片描述

实现方法

第一种:
实现原理:找到不同系统下tableViewCell对应的层级,在层级里面进行修改

我认为,如果tableViewCell的层级随系统变化的话,那你必须在每个系统层次都找到对应的层级,并书写方法。比如:

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

这三张图分别代表了IOS11以下,IOS11到IOS13,IOS13以上。
也就是说你在IOS13以上的模拟器中,还得找到对应的层级再写一遍。

这种方法给大家放一个链接,大家可自行查看。
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
这篇文章实现了IOS11和IOS11以下。

第二种
这里调用一个tableView的协议方法

方便大家看,给大家放一张图,代码在图下面

在这里插入图片描述

- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIContextualAction * deleteAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal title:@"删除" handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
        
    }];
    deleteAction.image = [UIImage imageNamed:@"delete"];
    deleteAction.backgroundColor = [UIColor colorWithDisplayP3Red:220.0/255.0 green:220./255.0 blue:220.0/255.0 alpha:1];
    return [UISwipeActionsConfiguration configurationWithActions:@[deleteAction]];
    





}

如果你想要几个左滑按钮,把上面这段代码再复制一遍,改改名字,放上你想要的文字和图片就行。

缺点:不能在IOS11以下实现。你得再写方法

第三种

这个方法是在复用的tableViewCell中写的

讲讲思路:

首先,你得明白这个左滑删除按钮它的层级,它跟cell是同一层级的,你左滑cell,就会出现删除按钮,不左滑的时候,它就呆在cell的右边,你看不见。

给你画个图吧。

在这里插入图片描述

看的懂不?就是说这个删除按钮超出了屏幕,你看不见的,你左滑它,就出现了。

好,明白这个道理后,你再想想,我们是不是有这样一种可能,直接覆盖掉系统的删除视图,加上我们自己的。

来,看看代码
在这里插入图片描述

   UIView *deleteView = [[UIView alloc] init];
    deleteView.backgroundColor = [UIColor whiteColor];
    [self addSubview:deleteView];
    [deleteView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(self.mas_right);
        make.top.mas_equalTo(self);
        make.bottom.mas_equalTo(self);
        make.width.mas_equalTo(self);
    }];
    
    UIView *testView = [[UIView alloc] init];
    [deleteView addSubview:testView];
    testView.userInteractionEnabled = YES ;
    
    [testView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(deleteView);
        make.top.mas_equalTo(deleteView);
        make.bottom.mas_equalTo(deleteView);
        make.width.mas_equalTo(95);
    }];
    
    
    UIButton *deleteBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [deleteBtn addTarget:self action:@selector(actionToTest) forControlEvents:UIControlEventTouchUpInside];
    
    deleteBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
        [testView addSubview:deleteBtn];
    deleteBtn.userInteractionEnabled = YES ;
        [deleteBtn setImage:[UIImage imageNamed:@"delete"] forState:UIControlStateNormal];
    //    [deleteView addSubView:deleteBtn];
        [deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.centerX.mas_equalTo(testView);
            make.top.mas_equalTo(testView);
            make.bottom.mas_equalTo(testView);
            make.width.mas_equalTo(74);
        }];






当然,你复用的类里不要忘记实现
在这里插入图片描述

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
    return YES;
}


//先要设Cell可编辑
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
    
}

最后

希望各位大佬指出其中不足,多多交流,促进学习。嘻嘻😁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值