2015-11-11 1 views
2

я пытался добавить жест распознаватель в моей UIImageViewПолучить изображения нажмите внутри ячейки таблицы представления UI

let rc = UITapGestureRecognizer(target: self, action: "foo:") 
rc.numberOfTapsRequired = 1 
rc.numberOfTouchesRequired = 1 
cell.bar.tag = indexPath.row 
cell.bar.addGestureRecognizer(rc) 

но не звонил мой Foo функция

func foo(sender: UIImageView!) { 
    self.performSegueWithIdentifier("VC", sender: sender) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if segue.identifier == "VC" { 
     let vc = segue.destinationViewController as! VC 
     vc.item = items[sender.tag] 
    } 
} 
+0

попробовать добавить 'cell.bar.userInteractionEnabled = true'. По умолчанию это 'false' для' UIImageView'. – rkyr

+0

Спасибо, что это работает для меня –

+0

, но у меня есть новая проблема, когда я хочу получить элементы xcode ошибки отображения, такие как «фатальная ошибка: неожиданно найденная нуль при разворачивании необязательного значения». Причина sender.tag равна нулю. Как решить эту проблему? @rkyr –

ответ

3

Итак, как я уже говорил до вашей проблемы, UIImageView по умолчанию имеет свойство userInteractionEnabled установлен на false. Вы можете изменить это в своем раскадровке или добавить строку cell.bar.userInteractionEnabled = true.

Следующая проблема заключается в реализации метода foo:: вы указываете отправителя как UIImageView!, но это должно быть UITapGestureRecognizer. Вот почему он выходит из строя - он не может быть UIImageView, поэтому, когда он разворачивается (!), это nil.

Решение: внесите foo объявление метода foo(recognizer: UITapGestureRecognizer). Если вам необходимо получить доступ к вашим imageView внутри этого метода вы можете использовать код ниже:

if let imageView = recognizer.view as? UIImageView { 
    ... 
} 

или с новым guard ключевого слова (Swift 2,0)

guard let imageView = recognizer.view as? UIImageView 
else { return } 
... 
+0

проголосовали за упоминание об пользовательском взаимодействии, которое разрешило мой случай –

1

Вы можете изменить

foo(recognizer: UITapGestureRecognizer) { 

}