LoginSignup
8
8

More than 1 year has passed since last update.

[Swift]UITapGestureRecognizerをUIImageViewに付けられないぃぃ!

Posted at

はじめに

こんにちは。UIImageにタップイベント付けたくて、UITapGestureRecognizer使ったのに全然反応してくれないじゃないかー!!って感じになったことありますよね。3日後には解決方法を忘れる自信があるので、記事にして残しておきます。それにしても親子丼って美味しいですよね。

この記事でわかること

  • UIImageView、UILabel、UIViewにUITapGestureRecognizerを使って、タップイベントを付ける方法

結論

早速結論なんですが以下のコードでタップイベントをつけることができます。
ポイントはimageView.isUserInteractionEnabled = trueですね。
この記述がないとタップしても全く反応してくれません。
以上です!

    @IBOutlet private weak var imageView: UIImageView! {
        didSet {
            let gesture = UITapGestureRecognizer(target: self, action: #selector(tappedImageView))
            imageView.addGestureRecognizer(gesture)
            imageView.isUserInteractionEnabled = true
        }
    }

   @objc private func tappedImageView() {
        print("imageViewがタップされたよ。")
    }

UILabelとUIViewにもタップイベントを付けてみる

UIImageViewだけでなく、UILabelやUIViewにもタップイベントを付けたくなることがありますね。
以下の画像のようなコードでタップイベントをつけることができます。
ポイントはやはりisUserInteractionEnabled = trueですね。
Label、UIImageViewはこの値が初期値ではfalseになっているので、trueにしなければならないみたいです。
UIViewに関しては初期値がtrueになっているので、isUserInteractionEnabled = trueを書く必要はないです。
紛らわしいですね。
スクリーンショット 2022-05-12 10.00.28.png

サンプルコード

一応コードをすべて載せておきます。

import UIKit

final class ViewController: UIViewController {

    @IBOutlet private weak var label: UILabel! {
        didSet {
            let gesture = UITapGestureRecognizer(target: self, action: #selector(tappedLabel))
            label.addGestureRecognizer(gesture)
            label.isUserInteractionEnabled = true
        }
    }
    @IBOutlet private weak var imageView: UIImageView! {
        didSet {
            let gesture = UITapGestureRecognizer(target: self, action: #selector(tappedImageView))
            imageView.addGestureRecognizer(gesture)
            imageView.isUserInteractionEnabled = true
        }
    }
    @IBOutlet private weak var sampleView: UIView! {
        didSet {
            let gesture = UITapGestureRecognizer(target: self, action: #selector(tappedSampleView))
            sampleView.addGestureRecognizer(gesture)
        }
    }

    @objc private func tappedLabel() {
        print("labelがタップされたよ。")
    }

    @objc private func tappedImageView() {
        print("imageViewがタップされたよ。")
    }

    @objc private func tappedSampleView() {
        print("sampleViewがタップされたよ。")
    }
}

おわりに

アウトプットすると自分の身になった感じがあっていいですね。
ではでは!

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8