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

时间:2016-10-31 12:41:59

标签: ios objective-c uitableview delete-row

我在UITableview控制器上有一个UITableview。我用数据加载了表视图,并将所选值存储在一个名为“selectedPsaData”的数组中。

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

以下代码适用于我的“didSelectRowAtIndexPath”。我想要一个适当的删除/删除功能 -

(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
}

2 个答案:

答案 0 :(得分:0)

您正在对所选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];
    }

希望这有帮助!

答案 1 :(得分:0)

使用您当前的方法,即使您获得了“删除”逻辑,您也会在滚动时获得奇怪的结果(因为表视图缓存并重用单元格)。

您应首先向BOOL selected课程添加PSAData属性。然后您的选择方法可以变为:

- (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];
}