前提・実現したいこと
Swiftのtableviewで外部からのコマンドで、指定したセルの色を変えたいのですが方法が分かりません。scrollToRowで指定したセルに移動する事までは出来たのですが、その指定したセルの色を変える方法があったら教えて頂けないでしょうか?
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
ソースコード
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
scrollToRowで使ったindexPathでセルを捕まえて、色を変えてあげて、
↓
swift
1 2func scrollAndBackgroundColorChange(indexPath: IndexPath){ 3 4 testTableView.scrollToRow(at: indexPath, at: .middle, animated: true) 5 let cell = testTableView.cellForRow(at: indexPath) 6 cell?.backgroundColor = UIColor.gray 7 8}
デフォルトの選択色でいいならば
↓
swift
1 2func scrollAndBackgroundColorChange(indexPath: IndexPath){ 3 testTableView.selectRow(at: IndexPath, animated: true, scrollPosition: .middle) 4}
で、セルの再利用に備えて、tableView(_:cellForRowAt:)
の中でも該当するセルへの色の変更を記述してあげてください。
投稿2019/09/22 13:36
編集2019/09/22 15:13退会済みユーザー
総合スコア0
0
もう少し詳しくわかると具体的に答えられますが、、、
元の色や、どのcell(単数・複数)の色を変えたいのかわかりませんので、
一般的な答えになります。
表示が動的(変化する)ようにするには
varで宣言したもの(変数)を読み込む設定にしないといけません。
例えば、、、
Swift
1// TableView前のViewController 2 3 var setBGColor: UIColor = UIColor() 4 5 func buttonAPressed(sender: UIButton) { 6 setBGColor = UIColor.green 7 self.performSegue(withIdentifier: "toTableView", sender: nil) 8 } 9 10 func buttonBPressed(sender: UIButton) { 11 setBGColor = UIColor.red 12 self.performSegue(withIdentifier: "toTableView", sender: nil) 13 } 14 15 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 16 if segue.identifier == "toTableView" { 17 let tbView = segue.destination as! SampleTableView 18 tbView.cellBGColor = setBGColor 19 } 20 21 22// TableViewのViewController 23class SampleTableView: UIViewcontroller, UITableViewDelegate, UITableViewDataSource { 24 25 @IBOutlet private weak var tableView: UITableView! 26 var cellBGColor: UIColor! 27 28 override func viewDidLoad() { 29 super.viewDidLoad() 30 tableView.delegate = self 31 tableView.datasource = self 32 } 33 34// ~~~ 間は省略 ~~~ 35 36 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 37 let cell = tableView.dequeueResuableCell(withIdentifier: "SimpleCell") 38 cell.backgroundColor = cellBGColor 39 return cell 40 }
特定のセルのみ変えたい場合は、cellのindexPathを指定しないといけないです。
具体的にはcellForRowAtで、switchもしくはifなどで条件分岐をして、
変えたいindexPathの時のcell.backgroundColor = cellBGColorなどと指定します。
もっと複雑になってくるようなら、データを別クラスで生成する必要が出てくると思います。
あれも、これも教えてと全部は教えれませんが、頑張ってください。
投稿2019/09/22 10:12
総合スコア1380
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/23 10:39