自定义删除
先给大家看看效果图


实现方法
第一种:
实现原理:找到不同系统下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
{
}
最后
希望各位大佬指出其中不足,多多交流,促进学习。嘻嘻😁
本文介绍了三种方法实现iOS tableViewCell自定义左滑删除按钮。第一种方法涉及不同系统下的层级修改,第二种利用tableView协议,第三种直接在复用cell中覆盖系统删除视图。提供了代码示例和实现思路。
1815

被折叠的 条评论
为什么被折叠?



