Saya ingin membuat UILabel dapat diklik.
Saya telah mencoba ini, tetapi tidak berhasil:
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
sumber
sumber
UILabel
? Apakah Anda yakin Anda menyentuh bingkai label? Apakah Anda memilikiUIViews
label penutup? ApakahuserInteractionEnabled
disetel keTrue
untuk label?Jawaban:
Sudahkah Anda mencoba menyetel
isUserInteractionEnabled
ketrue
padatripDetails
label? Ini seharusnya berhasil.sumber
Pembaruan Swift 3
Menggantikan
Selector("tapFunction:")
dengan
#selector(DetailViewController.tapFunction)
Contoh:
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") } }
sumber
@objc
.Pembaruan 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") }
sumber
Pembaruan Swift 3
yourLabel.isUserInteractionEnabled = true
sumber
Cepat 5
Mirip dengan @liorco, tetapi perlu mengganti @objc dengan @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") } }
Ini berfungsi pada Xcode 10.2.
sumber
@IBAction
hanya diperlukan untuk mengekspos metode ke Pembuat Antarmuka Xcode (karenanya IB). Ini juga bertindak seolah-@objc
olah tetapi jika Anda menambahkan isyarat atau tindakan lain dengan kode, Anda harus menggunakan@objc
anotasiSolusi yang baik dan nyaman:
Di ViewController Anda:
@IBOutlet weak var label: LabelButton! override func viewDidLoad() { super.viewDidLoad() self.label.onClick = { // TODO } }
Anda dapat menempatkan ini di ViewController Anda atau di file .swift lainnya (mis. CustomView.swift):
@IBDesignable class LabelButton: UILabel { var onClick: () -> Void = {} override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { onClick() } }
Di Storyboard pilih Label dan di panel kanan di "Identity Inspector" di kelas lapangan pilih LabelButton.
Jangan lupa untuk mengaktifkan di Label Attribute Inspector "User Interaction Enabled"
sumber
Anda harus mengaktifkan interaksi pengguna dari label itu .....
Misalnya
yourLabel.userInteractionEnabled = true
sumber
Untuk swift 3.0 Anda juga dapat mengubah durasi waktu gerakan tekan lama
label.isUserInteractionEnabled = true let longPress:UILongPressGestureRecognizer = UILongPressGestureRecognizer.init(target: self, action: #selector(userDragged(gesture:))) longPress.minimumPressDuration = 0.2 label.addGestureRecognizer(longPress)
sumber
Cukup mudah untuk mengabaikan seperti yang kulakukan, tapi jangan lupa untuk menggunakan
UITapGestureRecognizer
bukanUIGestureRecognizer
.sumber
Seperti yang dijelaskan dalam solusi di atas, Anda harus mengaktifkan interaksi pengguna terlebih dahulu dan menambahkan gerakan ketuk
kode ini telah diuji menggunakan
Swift4 - Xcode 9.2.0
yourlabel.isUserInteractionEnabled = true yourlabel.addGestureRecognizer(UITapGestureRecognizer(){ //TODO })
sumber
Cannot invoke initializer for type 'UITapGestureRecognizer' with an argument list of type '(() -> Void)'
ketika saya mencoba ini.