前提
セルタップで
・背景
・テキストカラー
が変わる仕組みを実装しています。
実現したいこと
セルAをタップすると背景が「赤」、テキストが「白」に変更。
セルBをタップするとセルAの背景、テキストカラー解除、セルBの背景が「赤」、テキストが「白」に変更します。
発生している問題・エラーメッセージ
TableリロードやViewの再描画がされると選択時の処理が消えてしまいます。
出来ていること
・セルのタップ時の色変更
出来ていないこと
・セルがタップされた状態のままViewControllerが再描画されても保存したいです
該当のソースコード
swift
1 2// 中身 3 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 4 5 let cell = tableView.dequeueReusableCell(withIdentifier: "tableViewCell01", for: indexPath) as! tableViewCell01 6 7 let speeds = ["1", "2", "3"] 8 9 cell.speed.text = speeds[indexPath.row] 10 11 // テキストのデフォルト色は000000です 12 13 return cell 14} 15 16// 選択時 17 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 18 19 let cell = self.speedsTableView.cellForRow(at:indexPath) as! tableViewCell01 20 cell.speed.textColor = UIColor(hex: "ffffff") 21 cell.backView.backgroundColor = UIColor(hex: "F00000") 22 23} 24// 解除時 25 func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 26 27 let cell = self.speedsTableView.cellForRow(at:indexPath) as! tableViewCell01 28 cell.speed.textColor = UIColor(hex: "666666") 29 cell.backView.backgroundColor = UIColor(hex: "ffffff") 30}
試したこと
https://teratail.com/questions/137199 の内容は試しましたがViewControllerが再描画されると消えてしまいます。
仮説
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { if ... (特定の番号を持っている場合){ // 背景色:赤 } ele { // 背景:白 } } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // 選択したrowを保存する }
みたいな処理が正しいのでしょうか?
選択および選択解除時に cell のプロパティをいじってますが、cell のプロパティはあくまでも一時的なもので、たとえば項目がたくさんあればスクロールして戻ってきたら選択解除状態になると思います。選択状態を維持したいなら、data source 側で選択状態を管理して cell に反映させる必要があります。
> data source 側で選択状態を管理して cell に反映させる必要があります。
cellForRowAt内に書くという事でしょうか?
もう少し詳しく教えていただけると助かります
すいません
まだ解決できていません
もう少しヒントをいただけないでしょうか??
・セルの背景色はcellForRowAt内で切り替え
・didSelectで何かしらの値を持たせる(例:セル番号 or Bool値)
という理解は合っていますでしょうか??

回答1件
あなたの回答
tips
プレビュー