swiftでsliderの値を変えるとtableviewCellの色が変わるアプリを作っています。
しかし何度試しても色が変わりません。
最終的にはRBGの値を少しずつずらしたグラデーションを表示したいのでtableviewcellの色の変更の仕方を教えてください。
該当のソースコード
swift
1import UIKit 2 3class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view. 8 } 9 10 var R:CGFloat! 11 var G:CGFloat! 12 var B:CGFloat! 13 14 @IBAction func rSlider(_ sender: UISlider) { 15 R = CGFloat(sender.value) 16 rLabel.text = String(sender.value) 17 } 18 @IBAction func gSlider(_ sender: UISlider) { 19 G = CGFloat(sender.value) 20 gLabel.text = String(sender.value) 21 } 22 @IBAction func bSlider(_ sender: UISlider) { 23 B = CGFloat(sender.value) 24 bLabel.text = String(sender.value) 25 } 26 @IBOutlet weak var rLabel: UILabel! 27 @IBOutlet weak var gLabel: UILabel! 28 @IBOutlet weak var bLabel: UILabel! 29 @IBOutlet weak var colorTableView: UITableView! 30 31 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 32 return 10 33 } 34 35 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ 36 let cell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier:"colorCell", for: indexPath) 37 cell.contentView.backgroundColor = UIColor.yellow 38 //(red:R,green:G,blue:B,alpha:1) 39 return cell 40 } 41} 42
試したこと
sliderの値がうまくUIColorに入ってないのが原因かなと思い、コメント文にしてまず普通に黄色に変えてみようと思いましたが白のままです。該当のソースコードにはその時のプログラムを貼っています。
補足情報(FW/ツールのバージョンなど)
swift version 5.0.1
UITableViewの背景色を変えたいのでしょうか、それともUITableViewCellの背景色を変えたいのでしょうか。
最終的にはRGBそれぞれの値を少しずつずらしたグラデーションのような形で表示したいので、TableViewCellの背景色を変えたいです
たぶん、スライダーを移動したタイミングでCellの色を変えたとしてもグラデーションは表現できないような気がします。移動したタイミングで全部のCellを変えたとしたらグラデーションになりませんし。
numberOfRowsInSectionの数とcellForRowAtで呼ばれた際のindexで色を変えるようにした方がCell毎にグラデーションでが実装できるかと思います。
Cell毎にグラデーションのつもりでした!説明不足ですみません。
indexで色を変えるにはどう言ったプログラムになるんでしょうか?
おこがましくてすみません。
そもそもセルが表示されていないのでは?tableView(_:cellForRowAt:) 呼ばれてます?
呼ばれていないなら dataSource の設定を確認して下さい。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
ここの部分は別物ですか?
それのことです。呼ばれてますか?
はい!
一応あります。。。
cellForRowAtを記述しているか否かではなく、呼ばれているかが重要です。
ブレークポイントなどで確認していますか?
もし呼ばれていない場合、colorTableView.reloadData()をviewDidLoadの中で呼んでみてはどうでしょう?
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
この中にprint("a")って書いてデバックエリアにaが表示されないってことは呼ばれてないですか?
datasourceの設定していますか?
設定できているかはどうしたら分かりますか?
回答のコメント欄で返しています。
回答1件
あなたの回答
tips
プレビュー