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
中的UIImageView
是true
【讨论】:
【参考方案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 关闭键盘的问题。
如何在 Xamarin.Forms 中使用 Tap Gesture 调用另一个页面?
Swiftui 如何在 foreach 循环中对整行使用 Tap Gesture
如果它连接的 UIImageView 在 UIScrollView 下,是不是可以让 Tap Gesture Recognizer 工作?