¿Cómo hacer que se haga clic en UILabel?

Me gustaría hacer un clic en UILabel.

Lo he intentado, pero no funciona:

class DetailViewController: UIViewController { @IBOutlet weak var tripDetails: UILabel! override func viewDidLoad() { super.viewDidLoad() ... let tap = UITapGestureRecognizer(target: self, action: Selector("tapFunction:")) tripDetails.addGestureRecognizer(tap) } func tapFunction(sender:UITapGestureRecognizer) { print("tap working") } } 

¿Has intentado establecer userInteractionEnabled en true en la etiqueta tripDetails ? Esto debería funcionar.

Actualización de Swift 3

Reemplazar

 Selector("tapFunction:") 

con

 #selector(DetailViewController.tapFunction) 

Ejemplo:

 class DetailViewController: UIViewController { @IBOutlet weak var tripDetails: UILabel! override func viewDidLoad() { super.viewDidLoad() ... let tap = UITapGestureRecognizer(target: self, action: #selector(DetailViewController.tapFunction)) tripDetails.isUserInteractionEnabled = true tripDetails.addGestureRecognizer(tap) } @objc func tapFunction(sender:UITapGestureRecognizer) { print("tap working") } } 

SWIFT 4 Actualización

  @IBOutlet weak var tripDetails: UILabel! override func viewDidLoad() { super.viewDidLoad() let tap = UITapGestureRecognizer(target: self, action: #selector(GameViewController.tapFunction)) tripDetails.isUserInteractionEnabled = true tripDetails.addGestureRecognizer(tap) } @objc func tapFunction(sender:UITapGestureRecognizer) { print("tap working") } 

Actualización de Swift 3

 yourLabel.isUserInteractionEnabled = true 

Necesita habilitar la interacción del usuario de esa etiqueta …..

Por ej.

yourLabel.userInteractionEnabled = true

Para veloz 3.0 También puede cambiar la duración del tiempo de la pulsación larga del gesto

 label.isUserInteractionEnabled = true let longPress:UILongPressGestureRecognizer = UILongPressGestureRecognizer.init(target: self, action: #selector(userDragged(gesture:))) longPress.minimumPressDuration = 0.2 label.addGestureRecognizer(longPress) 

Buena y conveniente solución:

En su ViewController:

 @IBOutlet weak var label: LabelButton! override func viewDidLoad() { super.viewDidLoad() self.label.onClick = { // TODO } } 

Puede colocar esto en su ViewController o en otro archivo .swift (por ejemplo, CustomView.swift):

 @IBDesignable class LabelButton: UILabel { var onClick: () -> Void = {} override func touchesEnded(_ touches: Set, with event: UIEvent?) { onClick() } } 

En Storyboard seleccione Etiqueta y en el panel derecho en “Inspector de identidad” en la clase de campo seleccione LabelButton.

No olvide habilitar en Inspector de atributos de tags “Interacción del usuario habilitada”

Como se describe en la solución anterior, primero debe habilitar la interacción del usuario y agregar el gesto de tap

este código ha sido probado usando

Swift4 – Xcode 9.2

 yourlabel.isUserInteractionEnabled = true yourlabel.addGestureRecognizer(UITapGestureRecognizer(){ //TODO })