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
(2024/11/24 14:18:11時点 Amazon調べ-詳細)
(2024/11/24 14:18:11時点 Amazon調べ-詳細)