Swift 3:无法识别的选择器发送到手势识别器的实例

时间:2017-02-21 21:42:14

标签: ios uicollectionview uitapgesturerecognizer

无论我做什么,我总是会遇到这个错误。

这是在cellForItemAtIndexPath函数中:

cell.postCell.profileImage.userView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "pressedUserImage:"))

和行动方法:

func pressedUserImage(userView: UIImageView) {
    print(userView.superview) // error happens here.

当然,我的userView在深层视图层次结构中,但它仍然必须工作。由于某种原因,它没有。即使我做userImage.superview?.superview等等,我仍然会收到错误。 我尝试使用#selector(pressedUserImage(_:),但没有运气。试过Selector("pressedUserImage:")。没有。

我在哪里错了?

更新,这里是cellForItemAtIndexPath功能:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellID", for: indexPath) as! Posts
    cell.postCell.profileImage.userView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "pressedUserImage:"))
    cell.postCell.buttonView.sharePost.addTarget(self, action: #selector(pressedShareButton), for: .touchUpInside)

    return cell
}

postCell基本上是UIView,其中包含图片,名称,文字。

这是错误:

  

***由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [project.Posts pressedUserImage]:无法识别的选择器发送到实例0x7a9a65e0'

2 个答案:

答案 0 :(得分:4)

看起来问题在于您的功能签名。它需要接受手势识别器作为参数,而不是包含视图。

像:

{{1}}

答案 1 :(得分:0)

约书亚指出,你的功能签名是错误的。您需要正确设置参数的类型,并添加下划线以使参数取消命名。

除了他的更改之外,如果您的类不是Objective-C类,您还应该将该函数标记为Objective-C:

@objc func pressedUserImage(_ sender: UITapGestureRecognizer) { ... }