前提・実現したいこと
現在、UITableViewにstoryboardでLabelやImageviewを設置し、
そのcellをタップすると画面遷移するシステムを作っています。
cellのlabel上をタップすると遷移してくれるのですが、しかし、今の問題は、imageview上をタップすると遷移してくれない、ということです。
今大きなアプリを作っているため構造が複雑ですが、その構造が原因かもしれないので、以下に詳しく書いておきます。
セルをタップしたことを検知する関数としては、遷移元のクラスで
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {}
を使っており、その関数内で画面遷移のコードを書いています。
tableviewのcellの内容については、cellクラスを作ってstoryboardで設置したオブジェクトを接続し、そこでデータを代入しています。
cellに設置したlabelやimageviewのデータは他のクラスに定義した共通のdictionaryから取ってきています。
わかる方お力添えよろしくお願いします!
該当のソースコード
swift
1//遷移元のクラス 2import UIKit 3 4class sortViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 5 6 @IBOutlet weak var sortPageScroll: UIScrollView! 7 @IBOutlet weak var sortTable: UITableView! 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 } 12 13 //セルの数を決めるメソッド 14 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 15 print(recipeTableInfo.count) 16 return recipeTableInfo.count 17 } 18 //セルの高さを決めるメソッド 19 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat{ 20 return 520 21 } 22 //セルの中身を返すメソッド 23 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 24 if let cell = tableView.dequeueReusableCell(withIdentifier: "sortCell") as? SortTableViewCell { 25//recipeTableInfoは、他のクラスに定義したdictionaryの名前 26//key__はそのdictionaryのkey名を変数にしたもの 27 let recipeInfo = recipeTableInfo[indexPath.row] 28 let recipename = recipeInfo[keyName]! 29 let recipetime = recipeInfo[keyTime]! 30 let recipecalorie = recipeInfo[keyCalorie]! 31 let recipeimage = recipeInfo[keyPath]! 32 33 cell.setCellData(recipename, recipetime, recipecalorie, recipeimage) 34 return cell 35 } 36 return SortTableViewCell() 37 } 38 39 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 40 //セルの選択を解除 41 sortTable.deselectRow(at: indexPath, animated: true) 42 let recipeInfo = recipeTableInfo[indexPath.row] 43 let recipeID = recipeInfo[keyID]! 44 //①storyboardのインスタンス取得 45 let storyborad: UIStoryboard = self.storyboard! 46 //②遷移先ViewControllerのインスタンス取得 47 let nextView = storyborad.instantiateViewController(withIdentifier: "recipeDetail")as! RecipeDetailViewController 48 //③画面遷移 49 self.navigationController?.pushViewController(nextView, animated: true) 50 nextView.updateDataWithID(recipeID) 51 } 52 53}
swift
1//TableViewのcellクラス 2import UIKit 3 4class SortTableViewCell: UITableViewCell { 5 6 @IBOutlet weak var recipeName: UILabel! 7 @IBOutlet weak var cookingTime: UILabel! 8 @IBOutlet weak var calorieLabel: UILabel! 9 @IBOutlet weak var recipeImage: UIImageView! 10 11 weak var recipeImageButton: UIButton! 12 13 func setCellData (_ name:String, _ time:String, _ calorie:String, _ imagepath:String) { 14 self.recipeName.text = name 15 16 cookingTime.text = time 17 calorieLabel.text = calorie 18 recipeImage.image = UIImage(named: imagepath) 19 20 } 21 22 override func awakeFromNib() { 23 super.awakeFromNib() 24 } 25 26 override func setSelected(_ selected: Bool, animated: Bool) { 27 super.setSelected(selected, animated: animated) 28 29 print("calledSetselected") 30 } 31} 32
補足情報(FW/ツールのバージョンなど)
Swift5
Mac OS 11.2.2
Xcode 12.4
回答1件
あなたの回答
tips
プレビュー