Swift5 TableViewのチェックマークを維持する

TableView(テーブルビュー)のcell(セル)はリユース(再利用)にて作成されるため、セルを押してチェックマークがついても、iPhone(アイフォーン)の画面の外に出てしまうと、再び画面内にそのセルが入ってきた時にまた初めからそのindexPath.row番号のセルを作り直すため、前につけたチェックマークは消えてしまいます。

ここでいうリユース(再利用)とは、セル自体を再利用をするのではなく、セルを作るための手順(コード)の再利用です。例えるなら金型と言ってもいいかもしれません。ですのでその金型がチェックマークを付けない金型ならリユースされて作られたセルもチェックマークは付かないことになります。

Xcode11のシュミレーター画面(テーブルビュー)

そのためセルをタップ(指でアイフォーンの画面をポンと押す行為)した時に、チェックを付けたということを、配列の変数に保存しなければなりません。

その保存したデータを元に、セルが作り直された時にチェックマークがあったセルならば再びチェックマークを付け直します。

参考にしたサイトは以下のサイトです。

https://teratail.com/questions/121237 https://tea-leaves.jp/swift/content/%E9%85%8D%E5%88%97

上記サイトを参考に、cellArrayという名前(名前は自由につけてください)の配列にtrueかfalseの値をindexPath.rowに関連づけて保存し、再び画面内にそのセルが入って再利用される時にその配列のBoolの中身(trueかfalseか)を参照してtrueの場合には「チェックマーク」をつけるというコードです。

以下がViewController全体のコードです。

https://gist.github.com/cabbage770/844b69b8229f71956e98e3a03641f3c7.js

まずは、チェックマークがついているか(trueかfalseか)を保存するための配列の宣言を行います。

セルに文字を入れるための配列「exampleArray」の数だけcellArray配列の中にfalseを入れます。

チェックマークが付いていたかどうかを保存する配列を宣言
https://gist.github.com/cabbage770/4b62da9ba5857ac61730eb4b3a55cabf.js

そして、セルをタップしてチェックマークをつけた時に、そのcellArrayの該当するindexPath.row番号の配列にtrueを格納します。

セルがタップされてチェックマークが付いた時に該当するindexPath.rowの配列の値をtrueにします。
https://gist.github.com/cabbage770/e1322e7e80c4839212ea3825c183947a.js

そして

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

にてセルを作る時(再利用時に)もしも該当するindexPath.rowのセルがチェックマークが付いていたことを示す「true」であった場合には、再びそのセルにチェックマークを付けます。。

https://gist.github.com/cabbage770/c3eaa67ccb30fb39095fe35be921917e.js
セルが再利用される時にチェックマークを付け直すコード
ViewController内のチェックマークをつける処理

以上がセルにつけたチェックマークが画面の外に出ても消えない方法として私が使っている方法です。