Chciałbym, aby UILabel był klikalny.
Próbowałem tego, ale to nie działa:
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
źródło
źródło
UILabel
? Czy na pewno dotykasz ramki etykiety? Czy maszUIViews
zakrywającą etykietę? CzyuserInteractionEnabled
ustawiona jestTrue
etykieta?Odpowiedzi:
Czy próbowałeś do zestawu
isUserInteractionEnabled
, abytrue
natripDetails
etykiecie? To powinno działać.źródło
Aktualizacja Swift 3
Zastąpić
z
Przykład:
źródło
@objc
.Aktualizacja SWIFT 4
źródło
Aktualizacja Swift 3
źródło
Szybki 5
Podobny do @liorco, ale muszą wymienić @objc z @IBAction .
To działa na Xcode 10.2.
źródło
@IBAction
jest potrzebny tylko do udostępnienia metody Xcode Interface Builder (stąd IB). Działa również tak,@objc
jakby dodawał gesty lub inne akcje za pomocą kodu, należy użyć@objc
adnotacjiDobre i wygodne rozwiązanie:
W Twoim ViewController:
Możesz to umieścić w swoim ViewController lub w innym pliku .swift (np. CustomView.swift):
W Storyboard wybierz Label iw prawym panelu w "Identity Inspector" w klasie field wybierz LabelButton.
Nie zapomnij włączyć w Inspektorze atrybutów etykiet „Włączona interakcja z użytkownikiem”
źródło
Musisz włączyć interakcję użytkownika z tą etykietą .....
Np
yourLabel.userInteractionEnabled = true
źródło
Dla swift 3.0 Możesz także zmienić czas trwania długiego naciśnięcia gestu
źródło
Całkiem łatwo przeoczyć, tak jak ja, ale nie zapomnij użyć
UITapGestureRecognizer
zamiastUIGestureRecognizer
.źródło
Jak opisano w powyższym rozwiązaniu, najpierw należy włączyć interakcję użytkownika i dodać gest stuknięcia
ten kod został przetestowany przy użyciu
Swift4 - Xcode 9.2.0
źródło
Cannot invoke initializer for type 'UITapGestureRecognizer' with an argument list of type '(() -> Void)'
kiedy tego próbuję.