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

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

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

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

1330閲覧

UITableViewCellをタップすると画面遷移したいけれど、UIImageViewの部分では遷移してくれない

pi.chan_san

総合スコア3

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2021/03/31 07:07

前提・実現したいこと

現在、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

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

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

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

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

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

tsuki01

2021/03/31 07:22

検証できていないので間違ってたら申し訳ありません。 「recipeImage」に対し、 "isuserinteractionenabled"プロパティをtrueに設定したら改善したりしませんでしょうか。ImageViewはデフォルトだとタッチイベントが通らなかったと思うので。 ・例 recipeImage.isUserInteractionEnabled = true ・参考URL https://developer.apple.com/documentation/uikit/uiview/1622577-isuserinteractionenabled
pi.chan_san

2021/03/31 11:24

解決しました!有難うございます。imageviewは確かにタッチイベント通らないですね。。またよろしくお願いします。
guest

回答1

0

自己解決

tsuki01さんのご指摘通りに、SortTableViewCellクラスのawakeFromNib関数でrecipeImage.isUserInteractionEnabled = trueを入力したところ、解決しました。

投稿2021/03/31 11:27

pi.chan_san

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問