UITableView的多选删除模式
1.设置TableView编辑模式打开;
[_tableView setEditing:YES];
2.设置接收被选中等待编辑的cell的可变数组,并设置BOOL型变量记录是否处于编辑模式
NSMutableArray *_waitArray;
BOOL _isEdit;
3.在设置切换编辑状态按钮时,设置为系统自带的。self.editButtonItem是一个系统自带的专用按钮。作用是为了设置表格(tableView)的编辑状态,在其点击事件中可以切换编辑状态/非编辑状态
self.navigationItem.leftBarButtonItem = self.editButtonItem;
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{//系统自带的专用按钮 self.editButtonItem 的点击事件
//需要重载父类的方法 先调用父类
[super setEditing:editing animated:YES];
//这个方法中的editing 会自动改变
[_tableView setEditing:editing animated:YES];
//改变编辑状态的时候 清空待删除数组 (退出编辑模式后 不执行删除)
[_watiArray removeAllObjects];
//设置专用按钮为全局变量
if (editing) {
self.navigationItem.rightBarButtonItem = _deleteBBi;
} else {
self.navigationItem.rightBarButtonItem = nil;
}
}
4.在返回编辑模式类型的函数里设置编辑模式为 删除 | 插入 TableView即被设置为多选且在编辑模式下默认第一次点击Cell为被选中,在选中状态下再次点击为取消选中
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
}
5.在cell被选择函数中,在Cell被选中时,先判断是否处于编辑模式。如果是编辑模式,将选中的cell加入等待操作的数组里
如果不是编辑模式,要设置从选中状态直接跳转为非选中模式,不激发反选函数
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableView.editing) {
//如果是编辑模式,就将点击的cell对应的数据添加到待删除数组中
[_tempArr addObject:[_dataArr objectAtIndex:indexPath.row]];
}else{
//如果不是编辑模式 那就该干嘛干嘛 (取消选中状态)
[tableView deselectRowAtIndexPath:indexPath animated:YES];
//非编辑模式下从选中到不被选中 不执行反选激发函数
}
}
6.在Cell的反选函数中,在Cell被取消选择时先判断是否处于编辑模式,如果处于编辑模式将被反选的数据移除等待操作的数组
如果处于非编辑模式,不执行任何操作
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableView.editing) {//如果处于编辑状态,就将反选的数据从待删除数组中清除
[_tempArr removeObjectAtIndex:indexPath.row];
}else{
NSLog(@"000");
}
}
7.在删除按钮的点击事件中,执行删除操作删除结束后刷新列表
- (void)deleteClick
{
//数据源中删除 待删除数组包含的元素
[_dataArray removeObjectsInArray:_waitArray];
//刷新列表
[_tableView reloadData];
}