在UI表格视图单元格中单击获取图像

时间:2015-11-11 04:41:02

标签: ios swift tableview uitapgesturerecognizer

我试图在我的UIImageView中添加手势识别器

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

2 个答案:

答案 0 :(得分:4)

因此,正如我之前提到的,问题是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 }
...

答案 1 :(得分:1)

您可以更改

foo(recognizer: UITapGestureRecognizer) {

}