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

问题描述:

我在UITableview控制器上有一个UITableview。我使用数据加载了表格视图,并将选定的值存储在一个名为“selectedPsaData”的数组中。如何通过点击按钮删除UITableview中的多个选定项目? iOS Objective-C

我想通过点击删除按钮从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 
} 
+0

你在哪里存储原始数据?有一个名为'psaData'的容器吗? – dirtydanee

+0

请将此添加到问题 –

+0

@dirtydanee并参考以下内容。我提到了我在另一个问题中存储psaData的位置。 http://stackoverflow.com/questions/40298105/how-to-filter-the-multiple-selected-values-from-an-array-and-load-it-to-other-ui – Fido

使用你目前的方法,即使你得到了“删除”逻辑(因为表视图缓存和重复使用单元格),滚动时你会得到奇怪的结果。

您应该首先将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]; 
} 
+0

这是如此真实,谢谢@PhillipMills我会试试这个。 – Fido

+0

谢谢测试和工作:) – Fido

您保留对所选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]; 
    } 

希望这有助于!

+0

嗨感谢您的解决方案,但这一个没有帮助我。如果我们选择了前2条记录,它将删除表格的最后2条记录。 – Fido