トランソニックソフトウェア

ブログ
BLOG

2019.04.17

[xcode 10.2]TableViewでセルを複数選択する方法

TableViewでセルを複数選択し、もう一度選セルを選択すると選択状態が解除される方法を説明します。

また、画面をスクロールするとチェックマークが外れてしまいますのでその対処法も説明します。

 

環境 [xcode 10.2:swift 5.0]

 

まずは今回実装したコード全体を記述します。

(TableViewのベースは以前の記事のものを使用しておりますので、よろしければ参照してください。)

 

上記のコードについての説明をしていきます。

 

 

まず、行番号を格納するための配列”rowListArray”を宣言します。そして複数選択を許可するため

を記述します。これによりTableViewで複数選択が可能になりました。

しかし、このままでは選択の解除や選択状態の維持できませんので対策をしていきます。

 

 

セル選択時のメソッド”didSelectRowAt”でセルの選択状態を判定し、 選択されていなければindexPath.rowを配列に追加、選択されていた場合は解除し配列から削除します。 今回は選択時にチェックマークを表示させるようにしましたので、チェックマークの有無で判定していきます。

 

選択されていない場合は、チェックマークをつけ、”append”によって配列にindexPath.rowを追加します。

 

すでに選択されていた場合は、チェックマークを外し、”filter”によって配列に格納されたindexPath.rowを削除します。

”listNumber”は”rowListArray”のfilter操作の仮置き場とし、操作が終わったら”rowListArray”に配列を入れ直します。

 

 

以上で選択された行番号が配列に格納されましたので、この配列を使ってセルの選択状態を設定していきます。 セルの表示は”cellForRowAt”で処理されますので、配列と同じ行番号であるか判定しセルにはチェックをいれるように設定していきます。

以上で、複数選択と解除また、選択状態の維持が実装できました。

 

 

※追記、swiftの配列操作では”filter”以外にも便利な機能がいろいろと用意されてあります。その中で今回は、”sorted”による配列の並び替えと”map”による格納された値への操作を実装しました。

”sorted”では{$0 < $1}とすることによって昇順に並び替えができます。 ”map”では{$0 + 1}とすることによって格納された値全てに+1できます。これにより配列に格納された行番号を都道府県コードに変更することができます。