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

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

詳細はこちら
リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

Xcode

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

Swift

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

Q&A

解決済

1回答

1061閲覧

UITableViewを使ってチェックリストを作成したが、押してもチェックがつかない

pi.chan_san

総合スコア3

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

Xcode

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

Swift

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

0グッド

0クリップ

投稿2021/03/26 06:50

編集2021/03/27 06:47

前提・実現したいこと

XcodeでUITableViewを使ったチェックボックス付きのリストを作っています。
空欄のボックスとチェックのついたボックスの画像がcellが押されると変更されるようにしたいのですが、うまくいきません。
現状は、空欄のボックスは表示されますが、cellを押してもcellが選択されるだけで画像には変化がありません。何か解決法はありますか?

分かる方、お力添えよろしくお願いします。

該当のソースコード

リストに表示するデータはmodelファイルRecipeModel.swiftにあるdictionarycommonDictionaryから取ってきています。

ShoppingTableViewController

1import UIKit 2 3class ShoppingTableViewController: UIViewController,UITableViewDelegate, UITableViewDataSource { 4 5 @IBOutlet weak var shoppingTableView: UITableView! 6 7 var val = commonDictionary[key2021323] 8 lazy var shopList: [[String:String]] = val![keyIngList] as! [[String:String]] 9 var localDate = "hoge" 10 11 var checked :UIImage = UIImage(named: "checked-checkbox--v1.png")! 12 var unchecked :UIImage = UIImage(named: "unchecked-checkbox.png")! 13 var ud = UserDefaults.standard 14 var status = String() 15 16 func updateData (_ selectedDate:String) { 17 localDate = selectedDate 18 self.val = commonDictionary[selectedDate] 19 if val != nil { 20 self.shopList = self.val![keyIngList] as! [[String:String]] 21 } 22 } 23 24 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 25 return shopList.count 26 } 27 28 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 29 30 let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 31 let temp = shopList[indexPath.row] 32 let ingname = temp[keyIngName] 33 let ingq = temp[keyIngQ] 34 if ingname != nil, ingq != nil { 35 let labelString = ingname! + " : " + ingq! 36 cell.textLabel!.text = labelString 37 if (self.val![labelString] != nil) { 38 cell.imageView?.image = UIImage(named: "checked-checkbox--v1.png") 39 } else { 40 cell.imageView?.image = UIImage(named: "unchecked-checkbox.png") 41 } 42 } 43 return cell 44 } 45 46 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 47 if let cell = tableView.cellForRow(at: indexPath) { 48 let cellText = cell.textLabel?.text 49 if cell.imageView?.image == UIImage(named: "checked-checkbox--v1.png") { 50 self.val?.updateValue(false, forKey: cellText!) 51 cell.imageView?.image = UIImage(named: "unchecked-checkbox.png") 52 } else { 53 self.val?.updateValue(true, forKey: cellText!) 54 cell.imageView?.image = UIImage(named: "checked-checkbox--v1.png") 55 } 56 cell.isSelected = false 57 } 58 } 59 60 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 61 return 56 62 } 63 64 override func viewDidLoad() { 65 super.viewDidLoad() 66 } 67 68 override func didReceiveMemoryWarning() { 69 super.didReceiveMemoryWarning() 70 71 } 72}

RecipeModel

1import UIKit 2 3var key2021323 = "2021/03/23(Tue)" 4var keyName = "common_name" 5var keyPath = "common_imagePath" 6var keyTime = "common_time" 7var keyCalorie = "common_calorie" 8var keyIngList = "common_ingredients" 9var keyIngName = "name" 10var keyIngQ = "quantity" 11 12let commonDictionary = [ 13 "2021/03/23(Tue)": ["common_name": "soba", 14 "common_imagePath": "unnamed.jpg", 15 "common_time": "20 minutes", 16 "common_calorie": "200 calorie", 17 "common_ingredients": [["name": "water", 18 "quanitity": "500cc"], 19 ["name": "soba", 20 "quantity": "2 or 3 bundle"], 21 ["name":"mentsuyu", 22 "quantity":"150cc"]] 23 ] 24]

追記:あと、できればセルを押した後選択が解除されるようにしたいです。

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

Swift5
Mac OS 11.2.2
Xcode 12.4

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

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

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

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

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

hoshi-takanori

2021/03/26 19:26

謎なんですが、commonDictionary[key2021323] や commonDictionary[selectedDate] の実体は何でしょうか?
pi.chan_san

2021/03/27 06:41 編集

情報が足りず、申し訳ございません。今Modelのファイルを追加しました。 keyの方は、commonDictionaryというDictionaryが含まれる他のswiftファイルに定義した、共通の変数です。上記のRecipeModel内にあります。 selectedDateというのは、今FSCalendarというライブラリを使用して、日付をタップした際に呼び出される関数で定義した、タップした日付の情報が入っている変数です。こちらのコードは載せてしまうと混乱すると考えたため載せていません。
guest

回答1

0

自己解決

tableviewのdelegateが接続されていませんでした。
hoshi-takanoriさん、気にかけていただきありがとうございました。

投稿2021/03/27 07:04

pi.chan_san

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問