UITableView自带有编辑模式 直接用系统的API可实现多选全选删除,具体可看下面的代码
static bool flag = YES;
// 全选
- (IBAction)allSelect:(id)sender {
if (flag == YES) { // 全选
for (int i = 0; i < self.dataList.count; i++) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
[self.deleteArr addObject:self.dataList[i]];
}
} else { // 取消全选
for (int i = 0; i < self.dataList.count; i++) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
[self.deleteArr removeObject:self.dataList[i]];
}
}
flag = !flag;
}
// 选择(进入编辑状态)或取消选择(退出编辑状态)
- (IBAction)select:(id)sender {
// 在编辑状态下能多选
self.tableView.allowsMultipleSelectionDuringEditing = YES;
self.tableView.editing = ! self.tableView.editing;
self.allSelect.enabled = ! self.allSelect.enabled;
if (self.tableView.editing == NO) {//取消选择
self.deleteItem.enabled = NO;
// 移除到删除数组的数据
[self.deleteArr removeAllObjects];
}
}
// 删除
- (IBAction)delete:(id)sender {
NSLog(@"deleteArr:%@",self.deleteArr);
if (self.tableView.editing) {
// 把数据源数据移除
[self.dataList removeObjectsInArray:self.deleteArr];
// 移除数组里的所有数据
[self.deleteArr removeAllObjects];
}
[self.tableView reloadData];
// 删除之后退出编辑模式
self.tableView.editing = NO;
self.deleteItem.enabled = NO;
self.allSelect.enabled = NO;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.deleteArr = [NSMutableArray array];
self.dataList = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9", nil];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
// 一开始不能全选和删除
self.allSelect.enabled = NO;
self.deleteItem.enabled = NO;
}
// 允许编辑 默认是yes
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
// 选择要处理的模式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
}
// 选中cell
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (self.tableView.editing) {
[self.deleteArr addObject:self.dataList[indexPath.row]];
self.deleteItem.enabled = YES;
}
}
// 取消选中
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
if (self.tableView.editing) {
[self.deleteArr removeObject:self.dataList[indexPath.row]];
if (!self.deleteArr.count) {
self.deleteItem.enabled = NO;
}
}
}