我有一個用例,我需要在一個可選視圖中選擇多個tableviewcells。選擇單元格後,我將使用選擇的結果進行處理。在iOS中選擇多個表格視圖單元格的原生方式
我該如何做到這一點標準iOS/UIKit
的方式?我將使用哪些控件?
我有一個用例,我需要在一個可選視圖中選擇多個tableviewcells。選擇單元格後,我將使用選擇的結果進行處理。在iOS中選擇多個表格視圖單元格的原生方式
我該如何做到這一點標準iOS/UIKit
的方式?我將使用哪些控件?
爲了處理這種情況,您需要一個額外的數組來保存選定的項目。
而在你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。
爲什麼要使用另一個數組?一旦用戶選擇了相應的行,只需在模型中添加一個標誌即可。 – Till
@Till:是的,這也是一個很好的解決方案。我使用數組輕鬆管理選定的項目。如果用戶需要對所有選定的對象進行操作。在陣列中很容易。如果更改在模型對象中。您需要首先找到所有選定的對象,然後對其進行修改。但我沒有想到,這是一個很棒的主意。感謝分享 !!! –
你是什麼意思「我將使用什麼控件」? – Till
你看過UITableView的文檔嗎? – rmaddy
@Atma,看看這篇文章的答案,或者rmaddy說看看文檔。這裏是鏈接的人http://stackoverflow.com/questions/18176907/uitableviewcellaccessorycheckmark-multiple-selection-detect-which-cells-selected –