ios swift uilabel uitapgesturerecognizer

ios - ¿Cómo hacer que se pueda hacer clic en UILabel?



swift uitapgesturerecognizer (10)

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

Me gustaría hacer que se pueda hacer clic en UILabel.

He intentado esto, 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") } }


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<UITouch>, with event: UIEvent?) { onClick() } }

En Storyboard seleccione Label y en el panel derecho en "Identity Inspector" en la clase de campo seleccione LabelButton.

No olvide habilitar en el inspector de atributos de etiquetas "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 toque

este código ha sido probado usando

Swift4 - Xcode 9.2

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


Debe habilitar la interacción del usuario de esa etiqueta .....

Por ej.

yourLabel.userInteractionEnabled = true


Es bastante fácil UITapGestureRecognizer por alto como lo hice yo, pero no olvides usar UITapGestureRecognizer lugar de UIGestureRecognizer .


Para swift 3.0 También puede cambiar la duración del tiempo de pulsación prolongada del gesto

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


Actualización de SWIFT 4

@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

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") } }


Actualización de Swift 3

yourLabel.isUserInteractionEnabled = true


Swift 5

Similar a @liorco, pero necesita reemplazar @objc con @IBAction .

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) } @IBAction func tapFunction(sender: UITapGestureRecognizer) { print("tap working") } }

Esto está funcionando en Xcode 10.2.