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)
        }
    }
}セルを移動させたらテーブルをリロードする前に、チェック済みのセルの番号を退避させておきます。
そして、テーブルのリロードが終わった後に、退避させておいたセル番号を使って、該当のセルにチェックマークを付けています。
なので、チェック状態を保持するというよりは、もう一度付け直すといった感じです。
実際にシミュレーターで動作を確認すると、セルを移動しても下のようにチェックマークが保持された状態になります。

created by Rinker
							¥3,536
(2025/10/31 21:40:19時点 Amazon調べ-詳細)
(2025/10/31 21:40:19時点 Amazon調べ-詳細)



