TableViewで複数のセルを選択し一度に操作したいことがあったのですが なかなか悩ましかったのでメモっちゃいます。 手順としては
- 編集時の左側に出る赤いマークを消す
- 編集時にセルの選択ができるようにする
- セル画選択されたら独自でマークを出し、indexPathを記録する
- 実行ボタンが押されたら、indexPathを元に操作する
といった感じです。 ちなみに、indexPathでセルを管理するので、セルの移動と同時に行うと挙動がおかしくなります。
編集時の左側に出る赤いマークを消す
独自でチェックマークの画像を出すので、デフォルトで出てくる赤いマークが表示されないようにします。
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewCellEditingStyleNone; }
編集時にセルの選択ができるようにする
allowsSelectionDuringEditing というのがあるので、これをYESにすれば編集中でも tableview:didSelectRowAtIndexPath:がよばれるようになります。
[self.tableView setAllowsSelectionDuringEditing:YES];
セル画選択されたら独自でマークを出し、indexPathを記録する
/* _selectedCellIndexPaths はNSMutableArrayのメンバ変数 */ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ if(tableView.editing){ UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; if([self isSelectedIndexPath:indexPath]){ cell.image = [UIImage imageNamed:@"checkmark_off.png"]; [_selectedCellIndexPaths removeObject:indexPath]; }else{ cell.image = [UIImage imageNamed:@"checkmark_on.png"]; [_selectedCellIndexPaths addObject:indexPath]; } } }
実行ボタンが押されたら、indexPathを元に操作する
-(void)tapDoneButton{ for( NSIndexPath *indexPath in selectedCellIndexPaths ){ //処理... } }
以上でTableViewの複数選択ができるようになります。 ちなみに非公開APIを使ってゴニョゴニョする方法もあるみたいですが、それほど手間ではないので独自で実装することをお勧めします。