Swift 3 - 带有 Tap Gesture 的图像视图

Posted

技术标签:

【中文标题】Swift 3 - 带有 Tap Gesture 的图像视图【英文标题】:Swift 3 - Image view with Tap Gesture 【发布时间】:2017-02-10 14:13:01 【问题描述】:

我在使用我放在图像视图上的点击手势时遇到问题。该图像当前作为“ActionLiked”存储在资产中,并且我已将图像视图设置为此图像。然后将其呈现为基于 JSON 的动态表视图(因此它对我放入 JSON 数组的每个项目重复)。我添加了点击手势以在每次点击它时打印出“TAPPED”,但是,它似乎一直没有工作 - 表格中当前有 7 个项目,点击手势将在 1 上工作,然后在下一个 2 上不起作用然后在第四个上工作并重复该模式

第 1 项 - 工作 第 2 项 - 没有工作 第 3 项 - 没有工作 第 4 项 - 工作 第 5 项 - 没有工作 第 6 项 - 没有工作 第 7 项 - 工作

我的调试控制台出现错误 无法加载从带有标识符的包中的笔尖引用的“”图像 但是每个人的图像都正确显示,只是无法识别点击手势?

【问题讨论】:

请给我们看一些代码... 【参考方案1】:

以下代码可能对您使用 Swift 4 有所帮助。

正如您所说,您想检测 tableview 单元格上的图像点击,请通过以下代码:

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.cellTappedMethod(_:)))

cell.yourImageView.isUserInteractionEnabled = true
cell.yourImageView.tag = indexPath.row
cell.yourImageView.addGestureRecognizer(tapGestureRecognizer)

并将以下方法添加到您的 ViewController:

@objc func cellTappedMethod(_ sender:AnyObject)
     print("you tap image number: \(sender.view.tag)")

【讨论】:

所以当我尝试这个时,每次我按下手势let tapGesture = UITapGestureRecognizer(target: self, action: #selector(NewsFeedVC.likePost(_:))) self.actionLike.isUserInteractionEnabled = true self.actionLike.addGestureRecognizer(tapGesture)func likePost(_ sender : UITapGestureRecognizer) print("TAPPED") 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序时都会得到一个未捕获的异常,原因:'-PostCell likePost:]:无法识别的选择器发送到实例 0x7fbc3e894a00' @Chad 正如您所说,您需要使用 tableview 来代替使用 self.actionLike 作为表格视图,最好使用 cell.actionLike 并识别它们,您需要根据索引分配标签表格视图中的单元格。并确保启用单元格图像的用户交互。【参考方案2】:

请检查isUserInteractionEnabled 中的UIImageViewtrue

【讨论】:

【参考方案3】:

我最近遇到了一个与您的问题相似的问题。我有许多图像,当用户点击它们时,我想以相同的方式响应它们。经过一些实验,我很清楚每个图像都必须有自己的UITapGestureRecognizer 实例。我最终使用了这样的代码,确保每张图片都能响应被点击:

for imageView in imageViews 
    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapResponse))
    imageView.addGestureRecognizer(tapGestureRecognizer)
    imageView.isUserInteractionEnabled = true

【讨论】:

【参考方案4】:

想法是您应该为每个 UIImageView 创建唯一的手势识别器。

let gestureRecognizerOne = UITapGestureRecognizer(target: self, action: #selector(tap))
firstImageView.addGestureRecognizer(gestureRecognizerOne)

let gestureRecognizerTwo = UITapGestureRecognizer(target: self, action: #selector(tap))
secondImageView.addGestureRecognizer(gestureRecognizerTwo)

但是我没有看到你的代码,所以,也许你应该在循环或类似的方式中创建它。

【讨论】:

以上是关于Swift 3 - 带有 Tap Gesture 的图像视图的主要内容,如果未能解决你的问题,请参考以下文章

PanGesture 和 Tap Gesture 之间的冲突

当 UITextField 位于 UIScrollView 内时,使用 Tap Gesture 关闭键盘的问题。

从 Tap Gesture 中获取特定的集合视图单元格

如何在 Xamarin.Forms 中使用 Tap Gesture 调用另一个页面?

Swiftui 如何在 foreach 循环中对整行使用 Tap Gesture

如果它连接的 UIImageView 在 UIScrollView 下,是不是可以让 Tap Gesture Recognizer 工作?