はじめに
ToDoアプリ等でよく使われる、
TavbleViewを使った、セルをタップするとチェックマークを付ける挙動を付けた所、tableView.reloadData()すると、チェックマークが外れた状態 (セルが選択されていない状態)になってしまいます。
これでは何をチェックしたのか解らないので、本末転倒な結果になります。
なので、tableView.reloadData()してもチェックマーク(セルが選択した状態)を付いた状態にする為に私が実践したやり方を紹介します。
ロジック(論理,筋道)を考える
1.チェックマークを保持する為の変数を定義する
@objc dynamic var checkMark: Bool = false
私はセルが選択していない状態をfalse,選択している状態をtrueにする事にしました!!
2.変数checkMarkがセルが選択された状態になるとtrue,選択解除されるとfalseになる(保存される)状態を作る
セル選択時のメソッド
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
try! realm.write {
list[indexPath.row].checkMark = true
//listは表示したいセルの配列の名前ですね
}
}
セル選択解除時のメソッド
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
try! realm.write {
list[indexPath.row].checkMark = false
}
}
3.TableViewが表示される際に、選択状態だったセルを選択状態にする
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
cell.textLabel?.text = list[indexPath.row].title
//チェックマークがtureの時に選択状態にする
if list[indexPath.row].checkMark == true {
tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none)
//それ以外は非選択状態にする
}else {
tableView.deselectRow(at: indexPath, animated: false)
}
return cell
}
これで起動時でもTableViewの更新時でもチェックマークを保持する事が出来ました!!
以上です!!