需要一个确定按钮,可以设置为NavigationController的左按钮,这是确定按钮实现的方法 因为如果多选或者全选删除的时候,需要先拿到选中的所有行数 所以会是一个数组。
// 拿到现在是选择状态的数组
NSArray * arr = self.tableView.indexPathsForSelectedRows;
// 此处从数组删除 注意:按照arr 顺序删除会崩溃
NSMutableIndexSet * set = [NSMutableIndexSet indexSet];
for (NSIndexPath * indexP in arr) {
[set addIndex:indexP.row];
}
[self.dataArr removeObjectsAtIndexes:set];
[self.tableView deleteRowsAtIndexPaths:arr withRowAnimation:UITableViewRowAnimationAutomatic];
NSLog(@"seleteArr = %@",arr);
设置一个全选按钮 内部实现将所有行数全选
NSArray * array = [self.tableView indexPathsForRowsInRect:CGRectMake(0, 0, self.view.frame.size.width, self.tableView.contentSize.height)];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[self.tableView selectRowAtIndexPath:obj animated:YES scrollPosition:UITableViewScrollPositionNone];
}];
然后还需要实现一个TableViewController的选中行数进行操作的方法
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
if (self.tableView.editing) {
// 实现编辑状态下多选
return UITableViewCellEditingStyleInsert | UITableViewCellEditingStyleDelete;
}else {
// 普通状态下左滑删除
return UITableViewCellEditingStyleDelete;
}
}
最后就是TableViewController自身的删除方法了
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the data source
// 先删数组
[self.dataArr removeObjectAtIndex:indexPath.row];
[self.tableView beginUpdates];
// 再删UI
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
} else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}