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.