【Swift】UITableViewの編集モード時にタップしたセルのチェックマーク状態を保持しておく方法

記事内に商品プロモーションを含む場合があります

TableViewを編集モードにし、セルをチェックした後に、移動させてtableをリロードするとチェックマークが消えてしまいますよね。

移動前

移動後

今回はこのチェックの状態を保持する方法を紹介します。

実装方法

今回はセルの移動後にチェックマークを外さないようにします。

該当する処理だけ、コードを抜き出すと次のようになります。

extension ViewController: UITableViewDataSource {    

    // セルの移動処理
    func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {

        // セルを移動させる処理・・・・


        // ① テーブルのリロード前に選択したのセルの番号を取得
        let indexPaths = tableView.indexPathsForSelectedRows

        // ② テーブルをリロード
        tableView.reloadData()

        // ③選択したセルにチェックマークを付ける
        indexPaths?.forEach {
            tableView.selectRow(at: $0, animated: false, scrollPosition: .none)
        }
    }
}

セルを移動させたらテーブルをリロードする前に、チェック済みのセルの番号を退避させておきます。

そして、テーブルのリロードが終わった後に、退避させておいたセル番号を使って、該当のセルにチェックマークを付けています。

なので、チェック状態を保持するというよりは、もう一度付け直すといった感じです。

実際にシミュレーターで動作を確認すると、セルを移動しても下のようにチェックマークが保持された状態になります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA