UITapGestureRecognizer 不适用于 UITextField 的自定义子类

Posted

技术标签:

【中文标题】UITapGestureRecognizer 不适用于 UITextField 的自定义子类【英文标题】:UITapGestureRecognizer not working for custom subclass of UITextField 【发布时间】:2015-05-25 01:20:31 【问题描述】:

我创建了 UITextField 的自定义子类 CustomTextView。

我创建了一个

private var tapGesture = UITapGestureRecognizer()

在 customTextView 类中

在 initInView 中,我有以下代码

tapGesture.addTarget(self, action: "tapTextField:")
self.addGestureRecognizer(tapGestureRecognizer)

CustomTextView 实现 UIGestureRecognizerDelgate

CustomTextView 有一个名为 tapTextField 的私有函数

现在,当我使用 ios 模拟器并单击文本字段时,函数 tapTextField 永远不会被调用。

我在这里缺少什么?我看到了类似的帖子,但没有一个回答我的问题。我无法评论这些,因为我还没有声誉。所以作为一个新问题提出。

PS:这是否与设置了 firstResponder 有关?这是我正在处理的其他人的代码,所以我可能遗漏了一些东西。让我知道我应该寻找什么

相关堆栈溢出问题:

Add UITapGestureRecognizer to UITextView without blocking textView touches UITextview: Place focus on becomefirstresponder

【问题讨论】:

你设置属性isUserInteractionEnabled了吗? 我认为 isUserInteractionEnabled 默认设置为 true,因为这是我可以与之交互的 UITextView。但我仍然明确地将其设置为 true 并尝试过。不走运!! 【参考方案1】:

我不知道 swift,但请尝试将 "tapTextField:" 更改为 "tapTextField" 并确保您没有任何参数/参数/无论 swift 在您的 "tapTextField" 函数中调用它们的内容。

看起来像

self.addGestureRecognizer(tapGestureRecognizer) 应该是self.addGestureRecognizer(tapGesture)

【讨论】:

【参考方案2】:

您可以尝试一些方法来调试问题。

1> 确保tapTextFieldtapTextField: 没有错误,即您正在添加带参数的选择器,但您已经实现了相同的方法而没有任何参数。

2> 确保没有任何其他透明视图遮挡您的自定义 uitextfield。 3> 在 xcode 控制台中打印 po yourTextFieldName 以查看您的文本字段实际上是否添加了任何手势识别器。

希望对你有帮助

【讨论】:

以上是关于UITapGestureRecognizer 不适用于 UITextField 的自定义子类的主要内容,如果未能解决你的问题,请参考以下文章

UITapGestureRecognizer 不适用于 UIImageView 自定义类

UITapGestureRecognizer 不适用于 UITextField 的自定义子类

UITapGestureRecognizer 不适用于 UIView 动画

UITapGestureRecognizer 适用于 UIImageView 但不适用于 UILabel

当我第一次快速点击按钮时,按钮点击不适用于 UITapGestureRecognizer

UITapGestureRecognizer 不适用于自定义 UIView 类