UITextField 上的 UITapGestureRecognizer 不再适用于 IOS 7.1

Posted

技术标签:

【中文标题】UITextField 上的 UITapGestureRecognizer 不再适用于 IOS 7.1【英文标题】:UITapGestureRecognizer on UITextField no longer works in IOS 7.1 【发布时间】:2014-03-11 13:03:36 【问题描述】:

我将UITapGestureRecognizer 附加到UITextField 以获得类似“下拉”的效果。当UITextField 被点击时,我会呈现一个带有内容的UIPopover。这就像 7.1 之前的魅力 - 现在 UITextField 刚刚成为第一响应者,并且完全忽略了手势识别器。尝试将 delaysTouchedBegan 设置为 YES,但没有帮助。有帮助吗?

【问题讨论】:

我也面临同样的问题?想知道原因。 【参考方案1】:

为什么要用UITapGestureRecognizer,最好用UITextFieldDelegate方法

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView

   //Do what you need to do...


您可以将textView 包裹在UIView 中,然后在该视图中添加UITapGestureRecognizer

【讨论】:

我只是将 textview 包裹在另一个视图中。但需要禁用文本字段的用户交互。 当文本字段已经是第一响应者时,将不会调用textFieldShouldBeginEditing: 委托方法。通过实现@JuroSheridan 回答的手势识别器委托,它应该在所有情况下都能正常工作。【参考方案2】:

为您的点击手势实现委托方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

   return YES;

然后设置 yourTapGesture.delegate = self;

【讨论】:

这应该是公认的答案。使用 textViewShouldBeginEditing 有一些问题。如果您的视图控制器中有多个 UITextField,则会随机调用所有 UITextField 的 textViewShouldBeginEditing。【参考方案3】:

实现UITextField的委托方法:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
      // Show popover here

      return NO;

【讨论】:

以上是关于UITextField 上的 UITapGestureRecognizer 不再适用于 IOS 7.1的主要内容,如果未能解决你的问题,请参考以下文章

单元测试 UITextField 上的操作

UITextField 上的强密码覆盖

UITextField 上的 UITapGestureRecognizer 不再适用于 IOS 7.1

没有看到 UIScrollView 上的 UITextField 时 resignFirstResponder

UITextField上的限制字符会破坏Emojis,只能添加一个不能删除

如何检测 UITextField 上的点击?