2016-10-31 15 views
0

我在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

回答

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]; 
} 
+0

這是如此真實,謝謝@PhillipMills我會試試這個。 – Fido

+0

謝謝測試和工作:) – Fido

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

希望這有助於!

+0

嗨感謝您的解決方案,但這一個沒有幫助我。如果我們選擇了前2條記錄,它將刪除表格的最後2條記錄。 – Fido

相關問題