[英]UIWebview remove tap to focus
当我双击网站的一部分时,UIWebView通常专注于所选内容,现在我希望UIWebView忽略双击,但仍然能够与之交互。
我该怎么做?
双击由UITapGestureRecognizer识别。 如果你真的想要这个,请浏览视图层次结构。 有点棘手,但它应该工作。
代码如下所示:
- (void)goThroughSubViewFrom:(UIView *)view {
for (UIView *v in [view subviews])
{
if (v != view)
{
[self goThroughSubViewFrom:v];
}
}
for (UIGestureRecognizer *reco in [view gestureRecognizers])
{
if ([reco isKindOfClass:[UITapGestureRecognizer class]])
{
if ([(UITapGestureRecognizer *)reco numberOfTapsRequired] == 2)
{
[view removeGestureRecognizer:reco];
}
}
}
}
我在这里放了一个演示: NoDoubleTapWebView
希望能帮助到你。
iOS 5.0+:
UIWebView
包含一个UIScrollView
以显示其内容,并可通过UIWebView
的scrollView
属性访问。 因此,一种可行的方法是将UIScrollView
子类化并覆盖-touchesShouldBegin:withEvent:inContentView
。 您可以从其tapCount
属性中获取UITouch
对象的点击次数,该属性可用于过滤掉双击手势,否则调用super方法。 这看起来像是这样的:
-(BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view {
UITouch * touch = [touches anyObject]; //Get a touch object
if (2 == touch.tapCount) { //If this is a double-tap...
return NO; //...don't begin touches
}
else { //Otherwise, call the superclass' implementation
return YES;
}
}
但是,为了将Web视图的滚动视图设置为自定义子类,您可能还必须子类化UIWebView
(通常不赞成)。 话虽如此,它可能会工作UIWebView
子类并重新定义scrollView
属性。 在接口文件中:
@interface MyAwesomeWebView : UIWebView {
}
@property (nonatomic, readonly, retain) MyAwesomeScrollView * scrollView;
@end
并在实现文件中:
@implementation
@dynamic scrollView
@end
不过,请谨慎行事。
Pre iOS 5.0:
正如Alan Moore在评论中所写,您可以在Web视图顶部添加透明视图,使用命中测试捕获所有触摸事件,并将触摸事件转发到Web视图,除非有双击。
编辑:更新的答案,包括有关子类化UIWebView等的警告。编辑2:包含iOS 5.0之前的第二个答案
我认为这样做的方法是在UIWebView上添加一个UITapGestureRecognizer,然后你可以根据需要过滤双击。
您可以在此处找到示例代码/讨论:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.