2013-12-20 82 views
-3

我有一個用例,我需要在一個可選視圖中選擇多個tableviewcells。選擇單元格後,我將使用選擇的結果進行處理。在iOS中選擇多個表格視圖單元格的原生方式

我該如何做到這一點標準iOS/UIKit的方式?我將使用哪些控件?

+0

你是什麼意思「我將使用什麼控件」? – Till

+0

你看過UITableView的文檔嗎? – rmaddy

+0

@Atma,看看這篇文章的答案,或者rmaddy說看看文檔。這裏是鏈接的人http://stackoverflow.com/questions/18176907/uitableviewcellaccessorycheckmark-multiple-selection-detect-which-cells-selected –

回答

1

爲了處理這種情況,您需要一個額外的數組來保存選定的項目。

而在你didSelectRowAtIndexPath你需要基於它的當前狀態(選擇/取消選擇)

的實現看起來像推/彈出所選項目:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
     if(cell.accessoryType == UITableViewCellAccessoryNone) 
     { 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      [selectedItemsArray addObject:[yourDataSourceArray objectAtIndex:indexPath.row]]; 
     } 
     else 
     { 
      cell.accessoryType = UITableViewCellAccessoryNone; 
      [selectedItemsArray removeObject:[yourDataSourceArray objectAtIndex:indexPath.row]]; 
     } 
     [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    } 

你也需要修改cellForRowAtIndexPath如:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     NSString *cellIdent = @"cell"; 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdent]; 
     if(cell == nil) 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdent]; 
     //Adding items to cell 
     if([selectedItemsArray containsObject:[yourDataSourceArray objectAtIndex:indexPath.row]]) 
     { 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
     } 
     else 
     { 
      cell.accessoryType = UITableViewCellAccessoryNone; 
     } 
     return cell; 
    } 

而不是顯示本地UITableViewCellAccessoryCheckmark您可以使用自定義圖像的選定狀態。您可以參考本教程custom accessory-view

+2

爲什麼要使用另一個數組?一旦用戶選擇了相應的行,只需在模型中添加一個標誌即可。 – Till

+0

@Till:是的,這也是一個很好的解決方案。我使用數組輕鬆管理選定的項目。如果用戶需要對所有選定的對象進行操作。在陣列中很容易。如果更改在模型對象中。您需要首先找到所有選定的對象,然後對其進行修改。但我沒有想到,這是一個很棒的主意。感謝分享 !!! –

相關問題