これが正攻法かあやしいんだけど、以前やったときの実装方法をメモしておきます。
準備
allowsSelectionDuringEditing
プロパティをYES
にする。
allowsSelectionDuringEditing
はUITableView
のプロパティ。編集モード時も行選択を可能にするかを設定する。InterfaceBuilder上では、 Editing プルダウンで設定可能。
アプローチ
「特定の行だけ選択可能とする」ために、「全行を選択可能にして、行選択イベントで対象行以外を無視する」ことにしました。
実装
上記のアプローチでいくと、行選択イベントは以下のように書けます。
// 行選択イベント
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (self.editing) {
if (/* 対象行判定 */) {
: // 何らかの処理
} else {
// 選択しなかったことにする。
[tableView deselectRowAtIndexPath:indexPath animated:NO];
}
return;
}
// 通常の行選択処理
}
これだけだと、対象行以外の行をタップしたとき一瞬選択色が表示されてしまいますので、もう一押し。
// セル生成処理
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = ...; // セル作る
if (/* NOT 対象行判定 */) {
// 対象行以外は、行選択色を表示しないようにする。
cell.selectionStyle = self.editing
? UITableViewCellSelectionStyleNone
: UITableViewCellSelectionStyleBlue;
}
}
とりあえずこれでいけました。