我试图在我的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]
}
}
答案 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) {
}