bircastri
bircastri

Reputation: 2159

UILabel set onClick

I'm building an application in Swift 3, so I want to call a function if I click on a particular UILabel, so I'm write this code but not works:

let tap = UITapGestureRecognizer(target: self, action: #selector(ViewController.tapFunction))
    self.labelTemp.isUserInteractionEnabled = true
    self.labelTemp.addGestureRecognizer(tap)

How can I render UILabel clickable ?

Upvotes: 2

Views: 1981

Answers (5)

BhargavR
BhargavR

Reputation: 1133

Set user interaction enabled for the UILabel and add the below code in the viewDidLoad()

self.label.isUserInteractionEnabled = true

let tap = UITapGestureRecognizer(target: self, action: #selector(self.labelTapped))
self.label.addGestureRecognizer(tap)

Add the tap action function as below :

@objc func labelTapped(_ gestureRecognizer: UITapGestureRecognizer) {
    print("Label clicked")
}

Please make user that there is no other transparent view overlapping the UILabel in the view. If the UILabel is a part of another view then please make sure that the container View's user interaction is enabled.

Hope this helps.

Upvotes: 2

Deviyani Swami
Deviyani Swami

Reputation: 767

  1. First you need to add Tap Gesture into storyboard enter image description here

  2. Create Action of that particular gesture

    override func viewDidLoad() {

            super.viewDidLoad()
    
            let tapOnLabel = UITapGestureRecognizer(target: self, action: #selector(self.tapGestireAction))
            self.labelTemp.isUserInteractionEnabled = true
            self.labelTemp.addGestureRecognizer(tapOnLabel)
        }
    
    
      @IBAction func tapGestureAction(_ sender: UITapGestureRecognizer) {
    
            //Perform action
        }
    

Upvotes: 0

Hitesh Surani
Hitesh Surani

Reputation: 13557

Please ensure that You have connected the outlet to UILabel because I have created simple demo code by copy-paste your code and it is worked as expected.

override func viewDidLoad() {
    super.viewDidLoad()
    let tap = UITapGestureRecognizer(target: self, action: #selector(tapFunction))
    self.labelTemp.isUserInteractionEnabled = true
    self.labelTemp.addGestureRecognizer(tap)
}

@objc func tapFunction() {
    print("tapFunction")
}

I suggest, Please remove UILabel from UIViewController and add it again.

Download sample code

Note: - Please ensure that user-interaction of UILabelis enabled

Upvotes: 0

Mukesh Shakya
Mukesh Shakya

Reputation: 445

You are lacking a function to trigger when the gesture touch is recognized. You need to add following:

let tap = UITapGestureRecognizer(target: self, action: #selector(tapFunction(_:)))
    self.labelTemp.isUserInteractionEnabled = true
    self.labelTemp.addGestureRecognizer(tap)

@objc func tapFunction(_ gestureRecognizer: UITapGestureRecognizer) {
    // handle label tap here    
}

Upvotes: 0

Gustavo Vollbrecht
Gustavo Vollbrecht

Reputation: 3256

Your selector should be an @objc func within self.

<#YourLabel#>.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.handleLabelTap)))

And when the user taps the label it will trigger:

@objc func handleLabelTap() {
    // handle label tap here    
}

Upvotes: 0

Related Questions