获取图像点击 UI table 查看单元格
Get image click inside UI table view cell
我尝试在我的 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]
}
}
你可以改变
foo(recognizer: UITapGestureRecognizer) {
}
因此,正如我之前提到的,您的问题是 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 }
...
我尝试在我的 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]
}
}
你可以改变
foo(recognizer: UITapGestureRecognizer) {
}
因此,正如我之前提到的,您的问题是 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 }
...