Eu gostaria de tornar um UILabel clicável.
Eu tentei isso, mas não 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")
}
}
ios
swift
uilabel
uitapgesturerecognizer
Daniele B
fonte
fonte
UILabel
? Tem certeza de que está tocando no quadro da etiqueta? Você tem umaUIViews
capa para o rótulo? EstáuserInteractionEnabled
definidoTrue
para o rótulo?Respostas:
Você já tentou conjunto
isUserInteractionEnabled
paratrue
notripDetails
rótulo? Isso deve funcionar.fonte
Atualização Swift 3
Substituir
com
Exemplo:
fonte
@objc
.Atualização SWIFT 4
fonte
Atualização Swift 3
fonte
Swift 5
Semelhante ao @liorco, mas precisa substituir o @objc pelo @IBAction .
Isso está funcionando no Xcode 10.2.
fonte
@IBAction
é necessário apenas para expor o método ao Interface Builder do Xcode (daí o IB). Ele também age como@objc
mas, se você adicionar os gestos ou outras ações com código, deverá usar a@objc
anotação #Solução boa e conveniente:
No seu ViewController:
Você pode colocar isso no seu ViewController ou em outro arquivo .swift (por exemplo, CustomView.swift):
No Storyboard, selecione Rótulo e, no painel direito, em "Identity Inspector" na classe de campo, selecione LabelButton.
Não se esqueça de ativar no Label Attribute Inspector "Interação do usuário ativada"
fonte
Você precisa habilitar a interação do usuário com esse rótulo .....
Por exemplo
yourLabel.userInteractionEnabled = true
fonte
Para o Swift 3.0, você também pode alterar o gesto por muito tempo.
fonte
Muito fácil esquecer como eu fiz, mas não se esqueça de usar
UITapGestureRecognizer
, em vez deUIGestureRecognizer
.fonte
Conforme descrito na solução acima, você deve ativar a interação do usuário primeiro e adicionar o gesto de toque
este código foi testado usando
Swift4 - Xcode 9.2
fonte
Cannot invoke initializer for type 'UITapGestureRecognizer' with an argument list of type '(() -> Void)'
quando tento isso.