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

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

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

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

Swift

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

Q&A

1回答

1131閲覧

UITableViewのcellの背景色とテキストについての質問

kentaromiki

総合スコア4

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/12/26 16:55

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
①UISlidderを動かすと、UILabelに表示される。
②UISlidderを動かすと、UITableViewの背景色が指定されたRGBカラーになる
③UISlidderを動かすと、UITableViewのtextプロパティに、RGB値が表示される(近い値が12個表示される)
この3つの機能を実装したiOSアプリケーションを作っています。

そこで、②③に関して問題があります。

発生している問題・エラーメッセージ

UISliderを動かしても、UITableViewの背景色が変わりません。
また、cellのtextプロパティにRGB値が表示されません。

該当のソースコード

swift

1import UIKit 2 3class ViewController: UIViewController, UITableViewDelegate { 4 5 6 @IBOutlet weak var redLabel: UILabel! 7 @IBOutlet weak var greenLabel: UILabel! 8 @IBOutlet weak var blueLabel: UILabel! 9 @IBOutlet weak var RGBLabel: UILabel! 10 11 @IBOutlet weak var blueValue: UISlider! 12 @IBOutlet weak var redValue: UISlider! 13 @IBOutlet weak var greenValue: UISlider! 14 15 @IBOutlet weak var table: UITableView! 16 var r = 255, g = 255, b = 255 17 18 func rgb(r: Int, g: Int, b: Int, alpha: CGFloat) -> UIColor{ 19 return UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: alpha) 20 } 21 22 func check(_ value: Int) -> Int{ 23 if value > 255 { 24 let _ = 255 25 } 26 if value < 0 { 27 let _ = 0 28 } 29 return value 30 } 31 32 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 33 34 return 13 35 } 36 37 func tableView(tableiew: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ 38 39 let cell = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: "Cell") 40// UITableViewCell. 41 var red = r, green = g, blue = b 42 switch indexPath.row { 43 case 1: 44 red = check(r-20) 45 case 2: 46 red = check(r-10) 47 case 3: 48 red = check(r+10) 49 case 4: 50 red = check(r+20) 51 case 5: 52 green = check(g-20) 53 case 6: 54 green = check(g-10) 55 case 7: 56 green = check(g+10) 57 case 8: 58 green = check(g+20) 59 case 9: 60 blue = check(b-20) 61 case 10: 62 blue = check(b-10) 63 case 11: 64 blue = check(b+10) 65 case 12: 66 blue = check(b+20) 67 68 default: 69 break 70 } 71 72 cell.backgroundColor = rgb(r: red, g: green, b: blue, alpha: 1) 73 74 cell.textLabel?.text = String(NSString(format: "%02x%02x%02x", red, green, blue)).uppercased() 75 76 return cell 77 } 78 79 func changeValue() { 80 81 RGBLabel.text = "RGB value is #" + String(NSString(format: "%02x%02x%02x", r, g, b)).uppercased() 82 table.reloadData() 83 } 84 85 @IBAction func redSlide(_ sender: Any) { 86 print(redValue) 87 r = Int(redValue.value) 88 redLabel.text = "R:(r)" 89 changeValue() 90 } 91 92 @IBAction func greenSlide(_ sender: Any) { 93 print(blueValue) 94 b = Int(blueValue.value) 95 blueLabel.text = "B:(b)" 96 changeValue() 97 } 98 99 @IBAction func blueSlide(_ sender: Any) { 100 print(greenValue) 101 g = Int(greenValue.value) 102 greenLabel.text = "G:(g)" 103 changeValue() 104 } 105 106 override func viewDidLoad() { 107 super.viewDidLoad() 108 109 redLabel.text = "R:(r)" 110 blueLabel.text = "B:(b)" 111 greenLabel.text = "G:(g)" 112 113 // Do any additional setup after loading the view. 114 } 115} 116

試したこと

cell.backgroundColor = rgb(r: red, g: green, b: blue, alpha: 1)

の部分を

cell. contentView .backgroundColor = rgb(r: red, g: green, b: blue, alpha: 1)

に変えてみましたがダメでした。

補足情報(FW/ツールのバージョンなど)

Xcode(Version 11.3 (11C29))

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

class ViewController: UIViewController, UITableViewDelegate {

UITableViewDataSourceプロトコルが抜けています。
UITableViewDataSourceプロトコルに準拠させ、テーブルビューのdataSourceとしてViewControllerのインスタンスを指定してください。

あとは
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell関数を実装すれば③はたぶん動くと思います。

②のセルの背景色はあまりオススメではありませんが、一応

UITableViewDelegate(DataSourceではないですよ?)の
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)

側で変えれば昔は反映されましたので、試してみてください。
参考:
https://qiita.com/rh_/items/16b088c12b715e38d953

投稿2019/12/27 01:14

takabosoft

総合スコア8356

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問