makoラボ

日常や勉強会や技術ネタ

UITableViewのセルを選択した時にチェックマークをつける

f:id:mako_wis:20140307110219p:plain

上の画像のようにUITableViewを使って選択肢を表示するようなUIを使うことって案外あるんですよね。 その時にはほぼ必ずチェックした事を示すためにチェックマークを付けると思います。

今回はチェックマークを選択された時にをつけたりはずしたりする方法を書いていこうと思います。

UITableViewの複数選択と単一選択

ちょっと本題に入る前にUITableViewの選択モードについて説明を簡単にしておきます。

UITableViewでは複数選択モードと単一選択モードがあります。セルを複数選択したり、一つだけ選択出来るようにしたり出来ます。

設定の切り替えは簡単でStoryboard上であればUITableViewのプロパティの「Selection」で「Multiple Selection」または「Single Selection」をそれぞれ指定する事で切り替えれます。ちなみにコード側で設定する場合は以下のコードで切り替えれます。

// YESで複数選択・NOで単一選択
self.conditionTableView.allowsMultipleSelection = YES;

選択されたときにチェックマークをつける

// セルが選択された時に呼び出される
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // 選択されたセルを取得
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    // セルのアクセサリにチェックマークを指定
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}

セルが選択された時にチェックマーク付ければ良いので上記のようなコードでチェックマークを付ける事が出来ます。

選択がはずれた時にチェックマークを外す

// セルの選択がはずれた時に呼び出される
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
    // 選択がはずれたセルを取得
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    // セルのアクセサリを解除する(チェックマークを外す)
    cell.accessoryType = UITableViewCellAccessoryNone;
}

選択がはずれた場合もその時のイベントで呼び出されるメソッドでチェックマークを外してやれば良いです。 選択したセルを再度タップして選択を解除した時はもちろん、単一選択の時に選択セルが変わった時にも外れる側のセルのインデックスが渡ってくるのでちゃんと解除出来ます。

おわり

今回はコードでチェックマークをつけたり外したりする方法を書いてみました。2つのUITableViewのイベントで付け替えをしてあげるだけで簡単にチェックマークを付け外しできますね。