前提・実現したいこと
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
![guest](/img/icon/icnUserSample.jpg)
回答1件
あなたの回答
tips
プレビュー