需要一个确定按钮,可以设置为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 } }