注册

iOS UITableView左滑删除功能

一、概述

UITbableView作为列表展示信息,除了展示的功能,有时会用到删除的功能,比如购物车视频收藏等。删除功能可以直接使用系统自带的删除功能,当横向向左轻扫cell时,右侧出现红色的删除按钮,点击删除当前cell。


二、效果图



44201739139a18ddc747fc5f760485f3.gif




效果图.gif


三、技术分析


  1. 让tableView进入编辑状态,即tableView.editing = YES

// 取消
[self.tableView setEditing:YES animated:NO];



  1. 返回编辑模式,即实现UITableViewDelegate中的- tableview:editingStyleForRowAtIndexPath:方法,在里面返回删除模式。如果不实现,默认返回的就是删除模式。

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
// 删除
return UITableViewCellEditingStyleDelete;
}



  1. 提交删除操作,即实现UITableViewDelegate中的- tableview:commitEditingStyle:editing StyleForRowAtIndexPath:方法。只要实现此方法,即默认实现了系统横扫出现删除按钮的删除方法。

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
//只要实现这个方法,就实现了默认滑动删除!!!!!
if (editingStyle == UITableViewCellEditingStyleDelete)
{
// 删除数据
[self _deleteSelectIndexPath:indexPath];
}
}



  1. 如果想把删除按钮改为中文,可以实现-tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:方法。

-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
return @"删除";
}


四、细节处理


  1. 以下属性必须设置为NO,默认为NO,否则会导致删除模式无效,反而成为多选模式

tableView.allowsMultipleSelection = NO;
tableView.allowsSelectionDuringEditing = NO;
tableView.allowsMultipleSelectionDuringEditing = NO;



  1. 侧滑状态下点击编辑按钮的bug。
// 编辑按钮被点击
- (
void)_rightBarButtonItemDidClicked:(UIButton *)sender
{
sender.selected = !sender.isSelected;
if (sender.isSelected) {

// 这个是fix掉:当你左滑删除的时候,再点击右上角编辑按钮, cell上的删除按钮不会消失掉的bug。且必须放在 设置tableView.editing = YES;的前面。
[
self.tableView reloadData];

// 取消
[
self.tableView setEditing:YES animated:NO];
}
else{
// 编辑
[
self.tableView setEditing:NO animated:NO];
}
}

转自:https://www.jianshu.com/p/4c53901062eb

0 个评论

要回复文章请先登录注册