IOS tableViewCell左滑自定义删除按钮

自定义删除

先给大家看看效果图

IOS tableViewCell左滑自定义删除按钮_第1张图片
IOS tableViewCell左滑自定义删除按钮_第2张图片

实现方法

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

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

IOS tableViewCell左滑自定义删除按钮_第3张图片IOS tableViewCell左滑自定义删除按钮_第4张图片
IOS tableViewCell左滑自定义删除按钮_第5张图片

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

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

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

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

IOS tableViewCell左滑自定义删除按钮_第6张图片

- (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的右边,你看不见。

给你画个图吧。

IOS tableViewCell左滑自定义删除按钮_第7张图片

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

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

来,看看代码
IOS tableViewCell左滑自定义删除按钮_第8张图片

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






当然,你复用的类里不要忘记实现
IOS tableViewCell左滑自定义删除按钮_第9张图片

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


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

最后

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

你可能感兴趣的:(IOS tableViewCell左滑自定义删除按钮)