2015-11-11 1 views
64

Я хотел бы сделать UILabel кликабельным.Как сделать UILabel интерактивным?

Я попытался это, но он не работает:

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

Какова структура вашего 'UILabel'? Вы уверены, что касаетесь рамку ярлыка? У вас есть «UIViews», покрывающий ярлык? Установлен ли 'userInteractionEnabled' в' True' для метки? – JAL

+0

Удостоверьтесь, что ваш UILabel IBOutlet подключен к вашему Nib или раскадровке – aahrens

+0

Отлично работает! Спасибо –

ответ

86

Вы пытались установить userInteractionEnabled в true на tripDetails этикетке? Это должно сработать.

+1

спасибо за ответ !!! Здесь у меня еще есть проблема с UITapGestureRecognizer: http://stackoverflow.com/questions/33659078/swift-how-to-make-a-uiview-clickable-in-uitableviewcell –

+0

Я пытаюсь изменить цвет фона на кране, но Событие tap срабатывает, когда я отпускаю палец. Есть ли способ поймать событие приземления? Длительное нажатие не то, что я ищу. –

2

Вам необходимо включить взаимодействие с пользователем этой этикетки .....

Для например

yourLabel.userInteractionEnabled = true

+0

это не помогло мне. Я пытаюсь сделать это на ярлыке в табличном представлении – Pavlos

9

Swift 3 Update

yourLabel.isUserInteractionEnabled = true 
+0

, это не помогло мне. Я пытаюсь сделать это на ярлыке в виде таблицы – Pavlos

+0

, можете ли вы показать мне свой код для более подробной информации? –

+0

только что заработал ура – Pavlos

53

Swift 3 Обновление

Заменить

Selector("tapFunction:") 

с

#selector(DetailViewController.tapFunction) 

Пример:

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

    func tapFunction(sender:UITapGestureRecognizer) { 
     print("tap working") 
    } 
} 
+0

благодарит и проголосовало! Работал в быстрой 3 – aznelite89

+0

Вау, tnx! Лиор –

2

Для быстрой 3.0 Можно также изменить жест длительное нажатие продолжительность времени

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

СВИФТ 4 Update

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

Как описано в вышеуказанном растворе следует включить взаимодействие с пользователем и добавьте первый водопроводную жест

этот код был проверен с помощью

Swift4 - Xcode 9.2

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