2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[UITableViewController] 編集モード時、特定の行だけ選択可能にする

Posted at

これが正攻法かあやしいんだけど、以前やったときの実装方法をメモしておきます。

準備

allowsSelectionDuringEditingプロパティをYESにする。
allowsSelectionDuringEditingUITableViewのプロパティ。編集モード時も行選択を可能にするかを設定する。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;
  }
}

とりあえずこれでいけました。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?