ios - 带有 UITextView 的 UITapGestureRecognizer

Posted

技术标签:

【中文标题】ios - 带有 UITextView 的 UITapGestureRecognizer【英文标题】:ios - UITapGestureRecognizer with UITextView 【发布时间】:2011-05-20 05:54:59 【问题描述】:

我有一个可滚动的、不可食用的 UITextView。我想给它添加一个手势识别器,所以当双击它时,会显示一个工具栏,再次双击它,工具栏会隐藏。

我通过子类化禁用了文本视图的选择功能并覆盖canBecomeFirstResponder 以返回NO。

我只是简单地添加水龙头识别器似乎没问题。

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showOrHideToolbars)];
tapRecognizer.numberOfTapsRequired = 2;
tapRecognizer.numberOfTouchesRequired = 1;
[textView addGestureRecognizer:tapRecognizer];

效果很好,除非我点击并按住文本视图,之后,识别器将不再接收任何操作。

这意味着,如果我点击并按住文本视图(我猜文本视图会进入选择模式,即使我禁用了选择功能),现在就不会再检测到双击了。

我尝试使用单击然后问题消失了,但我确实需要使用双击。

我也尝试过覆盖触摸事件处理方法,但没有用。

【问题讨论】:

【参考方案1】:

还有许多其他手势识别器附加到文本视图。因为你似乎不需要它们。您可以删除它们。

textView.gestureRecognizers = nil;

在添加双击识别器之前。它有效。

【讨论】:

谢谢!!它实际上还禁用了滚动功能,因此我仍然保留了平移识别器,而不是删除所有识别器。 忘记了。很高兴我能帮上忙。【参考方案2】:

谢谢...我通过 Deepdak 的建议进行了管理...以下代码将执行所需的操作 :)

UITapGestureRecognizer *taprecog = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openFolderController)];
taprecog.numberOfTapsRequired = 2;
taprecog.numberOfTouchesRequired = 1;

NSMutableArray *arr = [[NSMutableArray alloc]initWithArray:[textView gestureRecognizers]];
for (int i = 0; i < [arr count]; i++) 
    if ([[arr objectAtIndex:i] isKindOfClass:[UITapGestureRecognizer class] ]) 
        [arr removeObject:[arr objectAtIndex:i]];
       


[textView addGestureRecognizer:taprecog];
[taprecog release];

【讨论】:

您是否缺少 [textView setGestureRecognizers:arr]? 您确实意识到您只是在制作手势识别器数组的副本并对其进行操作?文本视图的数组在这里永远不会受到影响。 其实这整个循环是没有意义的。只需创建一个空数组并设置它。 @MachOSX,我已经在我的一个问题中实现了这一点,它工作正常。你试过了吗?

以上是关于ios - 带有 UITextView 的 UITapGestureRecognizer的主要内容,如果未能解决你的问题,请参考以下文章

带有 UITextView 的 iOS 7 UITableViewCell 隐藏在键盘后面

iOS - 带有 UITextView 的表格视图单元格未正确调整大小

iOS UITextView 或 UILabel 带有可点击的动作链接[重复]

iOS 7 + Calabash:带有 NSLinkAttributeName 的 UITextView 和链接上的可访问性不起作用

SWIFT iOS - 从多行 uitextview 获取带有换行符的文本,因为它们在屏幕上可见

从UITextView创建PDF