iOS 9中UITapGestureRecognizer出现问题

14

大家好,

今天我更新了我的iPhone到iOS 9后,手势识别器出现了问题。 这是错误信息:

警告:手势识别器(target= <(action=onVideoTap:, target=)>>) 被设置在storyboard/xib中添加到超过一个视图 (->; layer = >)上,这从未被允许,并且现在得到了执行。 从iOS 9.0开始,它将加载到第一个视图中。

iOS8时并没有遇到这个问题。 这个视图包含一个UIImageView和一个TextView。手势识别器被放置在ImageView中,并且只有对该视图的引用输出口。

我真的不理解这个问题。 有人能帮帮我吗?谢谢:)

3个回答

13

这种情况发生在我想要将一个轻拍手势识别器与包含在TableView中的TableViewCell中的图像一起使用。

问题是:

我添加了一个轻拍手势识别器,但是在我的表格中有多个TableViewCell(即多个图像)。

iOS会将UITapGestureRecognizer分配给第一个单元格中的第一个图像,其他单元格将没有手势(手势已经设置为仅适用于第一个图像)。

要解决此问题,请按照以下步骤进行:

  1. 确保你已经为要分配TapRecognizerGestureUIView选中了User Interaction Enabled
  2. 在子视图TableViewCell中添加新的UITapGestureRecognizer。代码:

    internal let tapRecognizer1: UITapGestureRecognizer = UITapGestureRecognizer()`
    
  3. 在您的主视图中(在我的情况下是TableView),并且为每个单元格分配您制作的UITapGestureRecognizer,将其与主视图中的一个主要函数相关联:

  4. cell.tapRecognizer1.addTarget(self, action: "img_Click:")
    cell.img.gestureRecognizers = []
    cell.img.gestureRecognizers!.append(cell.tapRecognizer1)
    
  5. 添加您想要在单击时触发的功能到UITapGestureRecognizer:

  6. func img_Click(sender: UITapGestureRecognizer) {
        print("ok")
    }
    

    注释:

    • 如果您不想在主视图中分配UITapGestureRecognizer操作,可以通过直接在其子视图中分配来使用简单的方法。
    • 在步骤4中,函数名称必须与addTarget行中的名称相同。

当我将目标添加到识别器时,我不得不使用以下代码:cell.tapRecognizer.addTarget(self, action: #selector(FeedController.imageTap(_:))) - Gustavo Straube
1
@GustavoStraube 是的,你说得对,这个升级已经在新的swift中发布了,但是旧版本也有我回答的那个功能。谢谢。 - Wajih

12

我认为当你使用Storyboard添加了一个Tap Gesture Recognizer时,这个问题就会出现。因为某些原因,你添加了多个视图(见图片)。

enter image description here

因此,删除其他错误的观点,保留正确的观点。

enter image description here


它对我起作用了,当我们将手势识别器连接到视图时,xcode不会给出任何反馈。 - Alessio Dal Bianco

4

已经解决了。这个故事板已本地化,并且我将识别器分配给图片视图两次。不知何故,这似乎也在其他故事板上造成了问题。


我遇到了同样的问题..你说的“你把它分配给图片视图两次”是什么意思..能否请你解释一下..这将非常有帮助。 - Anuj Arora
一个识别器只能被分配给另一个组件。对我来说,我将相同的识别器分配给图片视图两次。只需查看识别器并查看它引用哪些其他组件。 - user2529173
3
这很不幸 - 我遇到了同样的问题,因为我有意地在多个组件上使用了相同的手势识别器,这似乎是合理的做法。我想这意味着如果我想要将相同的行为附加到多个对象上,那么我需要创建多个手势识别器,感觉效率不高。 - Derek Lee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接