无法从情节提要中的 UITapGestureRecognizer 拖动 IBAction

Posted

技术标签:

【中文标题】无法从情节提要中的 UITapGestureRecognizer 拖动 IBAction【英文标题】:Can't drag IBAction from UITapGestureRecognizer in Storyboard 【发布时间】:2016-02-12 21:24:43 【问题描述】:

我正在尝试从我的 UITapGestureRecognizer 中拖动一个 IBAction,该 IBAction 放置在位于自定义 tableview 单元格中的 UIImageView 上。

但是,它不允许我将动作从情节提要拖到自定义 tableview 单元格的子类

单元的类在身份检查器中正确设置为正确的文件。并且在 imageview 上启用了用户交互。

所以我尝试输入 IBAction 并将其从文件连接到情节提要,它给出了这个错误:

这很令人困惑,因为我可以从 UIButtons 和其他视图对象中拖动 IBActions;只是不是这个 UITapGestureRecognizer。我最近将 Xcode 更新到 7.2.1

这是我在文档大纲中的视图层次结构:

这是点击手势的连接:

还有 imageview 的连接:

【问题讨论】:

错误告诉你问题所在。您正在尝试将 IBAction 从 UITableViewCell 连接到 UIViewController 或 UIViewController 子类。您可以将其添加到您的 UITableView 中,然后使用 locationInView 和 indexPathForRowAtPoint 来确定点击了哪一行。 @beyowulf 我不知道有任何视图控制器参与了我在这里所做的事情。我正在尝试将手势连接到我的单元格类(这是可重复的);不是视图控制器。 我的错,你曾经能够做你正在做的事情,但 ios 9 只改变了 UIGestureRecognizers 可以与 UITableViews 和 UICollectionViews 一起使用的方式。我编辑了我的评论。 @beyowulf 哦,我不知道这种变化(知道我过去可以做到这一点使这特别令人困惑)。感谢您的提醒;然后我会以编程方式完成。 【参考方案1】:

我总是在代码中添加点击手势识别器对象,而不是在 Storyboard 上工作,现在在许多 Xcode 版本更改之后(当前为 8.1,swift 3.0)。当我尝试在 Story board 上使用 Tap Gesture Regnizer 时,我重新审视了一些类似的问题。即使我正在处理一个简单的 UIImageView 并添加了 Tap Gesture Recognizer 对象(将 Tap Gesture Recognizer 对象拖放到您的图像视图中),我还是登陆了这个页面。在这里,我列出了一个分步教程,希望对像我一样最终访问此页面的其他人有用。

1) 确保您的图像视图在检查器中具有这些连接,然后再继续

2) 在你的 swift 代码中添加了@IBAction 响应函数。

 // MARK: Actions
  @IBAction func tapGestureAction (_ sender: UITapGestureRecognizer)
    print("Tap on Flower Image View")
  

3) 在 Main.storyboard 上,单击“文档大纲”或视图控制器场景中的图标集合中的 Tap Gesture 对象。

4) 转到 Connections Inspector 并 ctrl + 单击“Sent Actions”中“selector”旁边的加号并将其拖动以查看场景的控制器图标。松开鼠标后,您将看到在步骤 2)中定义的函数名称出现。您可以选择并且应该建立连接。

5) 如果连接成功,Tap Gesture Recognizer 对象的 Connections Inspector 应该如下所示

【讨论】:

【参考方案2】:

正如 beyowulf 在上面的 cmets 中指出的那样,iOS 9 中的一个变化改变了 UIGestureRecognizers 处理重复内容的方式。

这很不幸,因为我发现最好的做法是使用故事板而不是程序化实现,但如果你想弄清楚这里的代码:

在您的自定义单元格类中:

override func awakeFromNib() 
    super.awakeFromNib()

    let imageViewDoubleTap = UITapGestureRecognizer(
         target: self,
         action:#selector(ThisClass.userSwiped)
         )
    imageViewDoubleTap.numberOfTapsRequired = 2
    self.photoImageView.addGestureRecognizer(imageViewDoubleTap)

然后创建一个与您提供操作参数的名称相同的函数并在其中实现您的代码。

【讨论】:

太棒了,谢谢!编辑为最新的选择器语法

以上是关于无法从情节提要中的 UITapGestureRecognizer 拖动 IBAction的主要内容,如果未能解决你的问题,请参考以下文章

推送控制器无法从情节提要中的嵌入式 xib 工作

无法将事件添加到情节提要中的按钮

Xcode 11:无法从带有标识符的情节提要中实例化视图控制器

无法从情节提要显式加载视图控制器

无法禁用情节提要中的后退按钮

无法从 iOS 的情节提要中嵌入导航控制器