🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

1703閲覧

[Swift]TableViewのセルをタップした状態を維持したい

Jonny_dayo

総合スコア48

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2019/10/17 09:21

編集2019/10/17 09:43

前提・実現したいこと

TableViewのセルをタップし、色を変更した状態を維持したいです。
セルが使い捨てなのでスクロールすると色の変更が破棄されてしまうと言うことがわかったので、
cellForRowAtでisSelected == trueであればとif文を書いて見たのですが、維持できませんでした…

該当のソースコード

didSelectRowAt

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let cell = tableView.cellForRow(at:indexPath) print("select - (indexPath)") cell?.isSelected = true cell?.backgroundColor = .systemYellow //totalに入れる self.total += Float(recipedata.shared.priceArray[indexPath.row]) ?? 0 genkaTotal.text = String(self.total) //totalをラベルに反映させる selectedrecipe.append(indexPath.row) if kotei == "baika" { BaikaKotei() }else{ GenkaKotei() } }

didDeselectRowAt

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { print("deselect - (indexPath)") let cell = tableView.cellForRow(at:indexPath) cell?.isSelected = false cell?.backgroundColor = nil self.total -= Float(recipedata.shared.priceArray[indexPath.row]) ?? 0 genkaTotal.text = String(self.total) if let deselect = selectedrecipe.firstIndex(of: indexPath.row){ selectedrecipe.remove(at: deselect) } if kotei == "baika" { BaikaKotei() }else{ GenkaKotei() } }

ツールのバージョン

Xcode : Version 11.0
Swift : Apple Swift version 5.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

cellはあくまでも描画情報のみを持つべきです。
didSelectRowAt didDeselectRowAt にて選択状態をIndexPath毎に保存しましょう。
そしてcellForRowAtの際に選択状態を設定して色を変えるようにしましょう。

UITableViewCell生成時にUITableViewCell.SelectionStyle
を使えば、選択状態によって色を変えることができます。

投稿2019/10/17 15:24

nakasho_dev

総合スコア2655

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

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

Jonny_dayo

2019/10/18 02:04

あああああできましたありがとうございます!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問