質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

333閲覧

cellの選択状態を維持したい

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2022/06/15 11:13

編集2022/06/19 11:16

前提

セルタップで
・背景
・テキストカラー
が変わる仕組みを実装しています。

実現したいこと

セル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を保存する }

みたいな処理が正しいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2022/06/15 14:06

選択および選択解除時に cell のプロパティをいじってますが、cell のプロパティはあくまでも一時的なもので、たとえば項目がたくさんあればスクロールして戻ってきたら選択解除状態になると思います。選択状態を維持したいなら、data source 側で選択状態を管理して cell に反映させる必要があります。
退会済みユーザー

退会済みユーザー

2022/06/16 06:05

> data source 側で選択状態を管理して cell に反映させる必要があります。 cellForRowAt内に書くという事でしょうか? もう少し詳しく教えていただけると助かります
退会済みユーザー

退会済みユーザー

2022/06/21 07:34

すいません まだ解決できていません もう少しヒントをいただけないでしょうか?? ・セルの背景色はcellForRowAt内で切り替え ・didSelectで何かしらの値を持たせる(例:セル番号 or Bool値) という理解は合っていますでしょうか??
guest

回答1

0

ベストアンサー

自己解決しました。
https://qiita.com/Masataka-n/items/c7ce3607b0a5bd5d4c33 を参考にしました。

投稿2022/06/29 07:32

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問