はじめに
こんにちは。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
を書く必要はないです。
紛らわしいですね。
サンプルコード
一応コードをすべて載せておきます。
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がタップされたよ。")
}
}
おわりに
アウトプットすると自分の身になった感じがあっていいですね。
ではでは!