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 和链接上的可访问性不起作用