Christian Giacomi

An attempt at a small developer blog

UILabel tap gesture in Swift

Posted at — Feb 18, 2019

In iOS there are situations where a UIButton will not be exactly what you need. One of these, at least in my case has been when creating my UI via the Storyboard. I have found that embedding a UILabel in a UITableViewCell is a much simpler process that attempting to so so with a UIButton.

Therefore I have found myself using a UILabel more than once instead of a UIButton. Unfortunately a label does not respond exactly like a button, specifically when you tap the label, nothing happens by default.

To mimic the behavior of a UIButton you need to do a few simple things.

// Define your label as an implicitly unwrapped optional
@IBOutlet var label: UILabel!

// Set the label to accept user interactions
label.isUserInteractionEnabled = true

// Define your gesture and set a target and selector
let tapGesture = UITapGestureRecognizer(
    target: self,
    action: #selector(onLabelTap(tapGestureRecognizer:))
)

// Bind it to the label
label.addGestureRecognizer(tapGesture)

And of course you will need a selector to be invoked when the tap gesture is recognized.

@objc func onLabelTap(tapGestureRecognizer: UITapGestureRecognizer) {
    // Add your custom code here
}

This will allow you to mimic the same user experience as if you had used a UIButton

If you are using Swift 4.0 you will also need to use @objc in the signature of the method. That is all, and now your UILabel will respond to user taps just like a UIButton would.