Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift 3:发送到手势识别器实例的未识别选择器_Ios_Uicollectionview_Uitapgesturerecognizer - Fatal编程技术网

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

Ios Swift 3:发送到手势识别器实例的未识别选择器,ios,uicollectionview,uitapgesturerecognizer,Ios,Uicollectionview,Uitapgesturerecognizer,无论我做什么,我总是会犯这个错误 这在mycellForItemAtIndexPath函数中: cell.postCell.profileImage.userView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "pressedUserImage:")) 以及行动方法: func pressedUserImage(userView: UIImageView) { print(userView.sup

无论我做什么,我总是会犯这个错误

这在my
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
等等,我仍然会得到错误。 我尝试使用选择器(按图像(:)),但没有成功。尝试了选择器(“按图像”)。什么都没有

我哪里出了问题

更新,这里是
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
基本上是一个包含图像、名称和文本的
ui视图

以下是错误:

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


问题似乎出在函数签名上。它需要接受手势识别器作为参数,而不是包含的视图

比如:


问题似乎出在函数签名上。它需要接受手势识别器作为参数,而不是包含的视图

比如:


正如Joshua指出的,您的函数签名是错误的。您需要正确设置参数的类型,并添加下划线以取消命名参数


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

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

正如Joshua指出的,您的函数签名是错误的。您需要正确设置参数的类型,并添加下划线以取消命名参数


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

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


您能否共享
cellForItemAtIndexPath
函数?您是否还可以显示确切的异常消息文本手势识别器处理程序的参数是手势识别器,而不是触摸视图。使用发件人上的.view获取发送视图。很抱歉,所有这些都存在。@vacawama,您的意思是什么?UITapGestureRecognitor就是手势识别器ure识别器,否?是否可以共享
cellForItemAtIndexPath
功能?是否还可以显示确切的异常消息文本手势识别器处理程序的参数是手势识别器,而不是触摸视图。使用发送器上的.view获取发送视图。很抱歉,所有这些都存在。@vacawama,你是什么意思?UITapGestureRecognizer是一个手势识别器,不是吗?然后你可以得到这样的视图:
如果让userView=sender.view as?UIImageView{//use userView}
!!!现在我要去家得宝买干墙水泥了。谢谢大家!它成功了。然后你可以得到这样的视图:
如果让userView=sender.view as?UIImageView{//use userView}
!!!现在我要去家得宝买干墙水泥了。谢谢大家!它成功了。我想我把它和UIButtons混淆了!“如果你的类不是Objective-C类,你也应该将函数标记为Objective-C”。为什么?objective-c在哪里出现了问题?选择器是objective-c结构。为了让运行时能够使用选择器访问函数,它必须使用objective-c样式的分派。请注意,对于按钮和手势识别器上的选择器,这很少是一个问题,因为通常的目标是UIViewController,w这是一个Objective-C类。我想我把它和UIButtons混淆了!“如果你的类不是Objective-C类,你也应该将函数标记为Objective-C”。为什么?objective-c在哪里出现了问题?选择器是objective-c结构。为了让运行时能够使用选择器访问函数,它必须使用objective-c样式的分派。请注意,对于按钮和手势识别器上的选择器,这很少是一个问题,因为通常的目标是UIViewController,w这是一个客观的C类。