UITableView实现选中一行或者多行

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


你可能感兴趣的:(cell的单选删除或者全选删除)