質問: こんにちは。早速本題です。 tableViewCellにimageViewが設置してあり、それをタップすると拡大する機能を実装したいです。 cellには画像のみ設置してあると考えてください。 ワンタップで広げたいためdidSelectRowAt内で機能を実装しようとしているのですが。 imageViewの後ろのviewをタップした際のdidSelectRowAtの反応をなくすことは可能でしょうか。 imageView上に同サイズのbuttonを設置してそれをタップした時に拡大画面を表示することはできるのですが、それだとimageViewの画像を取得できません。 なのでdidSelectRowAtで実装するのが一番いいと思うのですが... 必要な情報があればお聞きください。分かる方返信お待ちしております。
回答: > > imageView上に同サイズのbuttonを設置してそれをタップした時に拡大画面を表示することはできるのですが、それだとimageViewの画像を取得できません。 > > > 上記は`Delegate`パターンで以下の様に実装できます、参考にしてみてください。 ※ 最低限のコードなので自分のプロジェクトに読み替えてください。 【Swift】delegate実装の流れ - Qiita ``` import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, HogeCellDelegate { @IBOutlet weak var tableView: UITableView! func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { if let cell = tableView.dequeueReusableCell(withIdentifier: "HogeCell", for: indexPath as IndexPath) as? HogeCell { // Delegateを自分に登録 cell.delegate = self return cell } return UITableViewCell() } func tappedImage(image: UIImage) { // セルの画像上ボタンタップ時に呼ばれる(画像が引数で渡される) } } // プロトコル定義 protocol HogeCellDelegate: class { func tappedImage(image: UIImage) } // セル class HogeCell: UITableViewCell { // Delegate weak var delegate: HogeCellDelegate? // セルに表示している画像 @IBOutlet weak var cellImage: UIImageView! // 画像上のボタンタップ時イベント @IBAction func tappedImage(_ sender: UIButton) { if let image = cellImage.image { // Delegateメソッドを呼ぶ(引数は渡したい画像) delegate?.tappedImage(image: image) } } } ```