

### 実現したいこと

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

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

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

### ソースコード

リストに表示するデータはmodelファイルにあるdictionary`commonDictionary`から取ってきています。

[code]

    import UIKit
    
    class ShoppingTableViewController: UIViewController,UITableViewDelegate, UITableViewDataSource {
        
        @IBOutlet weak var shoppingTableView: UITableView!
        
        var val = commonDictionary[key2021323]
        lazy var shopList: [[String:String]] = val![keyIngList] as! [[String:String]]
        var localDate = "hoge"
        
        var checked :UIImage = UIImage(named: "checked-checkbox--v1.png")!
        var unchecked :UIImage = UIImage(named: "unchecked-checkbox.png")!
        var ud = UserDefaults.standard
        var status = String()
        
        func updateData (_ selectedDate:String) {
            localDate = selectedDate
            self.val = commonDictionary[selectedDate]
            if val != nil {
                self.shopList = self.val![keyIngList] as! [[String:String]]
            }
        }
        
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return shopList.count
        }
        
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            
            let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
            let temp = shopList[indexPath.row]
            let ingname = temp[keyIngName]
            let ingq = temp[keyIngQ]
            if ingname != nil, ingq != nil {
                let labelString = ingname! + " : " + ingq!
                cell.textLabel!.text = labelString
                if (self.val![labelString] != nil) {
                    cell.imageView?.image = UIImage(named: "checked-checkbox--v1.png")
                } else {
                    cell.imageView?.image = UIImage(named: "unchecked-checkbox.png")
                }
            }
            return cell
        }
        
        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            if let cell = tableView.cellForRow(at: indexPath) {
                let cellText = cell.textLabel?.text
                if cell.imageView?.image == UIImage(named: "checked-checkbox--v1.png") {
                    self.val?.updateValue(false, forKey: cellText!)
                    cell.imageView?.image = UIImage(named: "unchecked-checkbox.png")
                } else {
                    self.val?.updateValue(true, forKey: cellText!)
                    cell.imageView?.image = UIImage(named: "checked-checkbox--v1.png")
                }
                cell.isSelected = false
            }
        }
        
        func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
            return 56
        }
        
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            
        }
    }
    
[/code]

### 開発環境

Swift5  
Mac OS 11.2.2  
Xcode 12.4


CC BY-SA 4.0
2021-03-26T11:02:54.553
74911
2021-03-27T07:00:32.963
2021-03-26T11:25:38.353
3060
44488
question
swift xcode uitableview swift5
UITableViewを使ってチェックリストを作成したが、押してもチェックがつかない


OOPerさんのコメントにあるように、delegateが接続されていませんでした。  
非常に単純ですみません。


CC BY-SA 4.0
2021-03-27T07:00:32.963
74928
2021-03-27T07:00:32.963
44488
74911
answer