2015-10-11 2 views
3

Использование iOS 9 и столкновение с проблемой с UITapGestureRecognizer. У меня есть ViewController-A с UITableView. Я добавил tableViewCell, у которого есть textLabel. Я хочу применить tap на textLabel. Поэтому, если я нажимаю на textLabel - он должен печатать на консоли или делать что-либо ещеiOS 9: Распознаватель жестов был настроен в раскадровке/xib для добавления к нескольким представлениям (не работает)

Вопрос: TapRecogniser не работает. Получение ниже сообщение об ошибке:

enter image description here

Вот что я сделал:

1) Добавлен `UITapGestureRecognizer» на TextLabel (из раскадровки). Включено Взаимодействие пользователя для TextLabel (ошибка даже сейчас)

2) Ниже приводится IBAction:

@IBAction func nameTap(sender: UITapGestureRecognizer) { 
    print("a") 
} 

3) CellForRowAtIndexPath

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! ThirdViewCell! 
    cell.nameLabel?.text = "XYZ" 

    let nameTapRecognizer = UITapGestureRecognizer(target: self, action: Selector("nameTap:")) 
    nameTapRecognizer.cancelsTouchesInView = false 
    cell.nameLabel?.addGestureRecognizer(nameTapRecognizer) 
    return cell 
} 

PS: 1) Это работает в iOS 8. Я проверил ... Нет дубликатов (есть только один распознаватель крана во всем файле и связанный с textLabel)

2) Я не хочу использовать метод didSelectRowAtIndexPath, поскольку мне нужно реализовать TapGestureRecognizer для большего количества textLabels в tableViewCell.

+0

кран не working..nothing происходит после того, реализующей код..i снял скриншот об ошибке и опубликовал в вопросе –

+0

Избавьтесь от UITapGestureRecognizer, который вы добавили в раскадровки. Он должен быть установлен только в вашей 'cellForRowAtIndexPath'. – vacawama

ответ

4

вы видите консоль ошибок Label, и свойство, как UserInteractionEnabled = NO; увидеть снимок экрана

enter image description here

попробовать этот

let nameTapRecognizer = UITapGestureRecognizer(target: self, action: Selector("nameTap:")) 
nameTapRecognizer.cancelsTouchesInView = false 
cell.nameLabel?.tag = indexPath.row // add this 
nameTapRecognizer.numberOfTapsRequired = 1 // add this 
nameTapRecognizer.delegate =self 
cell.nameLabel?.userInteractionEnabled = true // add this 
cell.nameLabel?.addGestureRecognizer(nameTapRecognizer) 

// method 
func nameTap(gesture: UITapGestureRecognizer) { 
let indexPath = NSIndexPath(forRow: gesture.view!.tag, inSection: 0) 
let cell = tableView.cellForRowAtIndexPath(indexPath) as UITableViewCell 

// Do whatever you want. 
} 
+0

использовать любой Жест, как использовать Раскадровка на основе еще использовать программно, я думаю, что ru попытался в обоих –

+0

R u проверил ответ работает или нет –

+0

да .. это сработало..отчет много :) –

Смежные вопросы