如何通过点击按钮删除 UITableview 中的多个选定项目? iOS Objective-C

How to remove multiple selected items in an UITableview by tapping a button ? iOS Objective-C

我在 UITableview 控制器上有一个 UITableview。到目前为止,我用数据加载了 table 视图,并将选定的值存储在一个名为 "selectedPsaData" 的数组中。

我想通过点击删除按钮从 tableview1 中删除多个选定的单元格。

以下代码适用于我的"didSelectRowAtIndexPath"。我想要一个合适的 Remove/Delete 函数 -

(IBAction)removeBtntapped:(id)sender{
}

请帮助我,因为我对 Objective-C 比较陌生。

- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *psaData =[self.loadedPSAData objectAtIndex:indexPath.row];
    PSATableViewCell *cell=[tableView1 cellForRowAtIndexPath:indexPath];


    [self.tableView1 deselectRowAtIndexPath:indexPath animated:YES];
  //  [self.tableView2 deselectRowAtIndexPath:indexPath animated:YES];

    if([self isRowSelectedOnTableView:tableView1 atIndexPath:indexPath])
    {
        [self.selectedCells removeObject:indexPath];
        [self.selectedPSAData removeObject:psaData];
        cell.accessoryType =UITableViewCellAccessoryNone;
    }
    else{
        [self.selectedCells addObject:indexPath];
        [self.selectedPSAData addObject:psaData];

        cell.accessoryType =UITableViewCellAccessoryCheckmark;
        [self.tableView1 performSelector:@selector(reloadData) withObject:nil afterDelay:0.2];  
    }
    NSLog(@"%@", self.selectedPSAData); //selected values are holding in this Array
}

你对选定的PSA数据有参考,不错。因此,在您的删除功能中,您应该只从原始 PSA 数据数组中删除所选的 PSA 数据,然后重新加载您的 tableView.

您的函数应该类似于以下内容:

    - (IBAction)removeBtntapped:(UIButton*)button {

        // Lets create a tmp container with the original data
        NSMutableArray *updatedLoadedPSAData = [[NSMutableArray alloc] initWithArray:self.loadedPSAData];

        // Lets iterate through the selected PSA data
        for (id selectedPSA in self.selectedPSAData) {
            // Remove the selected item from the tmp container
            [updatedLoadedPSAData removeObject:selectedPSA];
        }
        // Assign the tmp container to the original PSA data
        self.loadedPSAData = updatedLoadedPSAData;

        // Reload the tableView
        [self.tableView1 reloadData];
    }

希望对您有所帮助!

使用您当前的方法,即使您实现了 'remove' 逻辑(因为 table 视图缓存并重用单元格),您在滚动时也会得到奇怪的结果。

您应该先在 PSAData class 中添加 BOOL selected 属性。那么你的选择方式可以变成:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    PSAData *psaData = [self.loadedPSAData objectAtIndex:indexPath.row];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    if (psaData.selected) {
        [self.selectedPSAData removeObject:psaData];
        psaData.selected = NO;
    } else {
        [self.selectedPSAData addObject:psaData];
        psaData.selected = YES;
    }
    [tableView reloadData];
}

要获得视觉指示器,只需在 tableView:cellForRowAtIndexPath:.

中添加几行
PSAData *psaData = [self.loadedPSAData objectAtIndex:indexPath.row];
if (psaData.selected) {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
    cell.accessoryType = UITableViewCellAccessoryNone;
}

最后,删除项是匹配数组元素的情况。

- (void)removeSelected:(id)sender
{
    for (id object in self.selectedPSAData) {
        [self.loadedPSAData removeObject:object];
    }
    [self.selectedPSAData removeAllObjects];
    [self.tableView reloadData];
}