UIWebview删除点击以进行聚焦

时间:2011-11-15 15:15:07

标签: objective-c ios uiwebview uiscrollview

当我双击网站的一部分时,UIWebView通常专注于所选内容,现在我希望UIWebView忽略双击,但仍然可以与之交互。

我该怎么做?

3 个答案:

答案 0 :(得分:13)

双击由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

希望它有所帮助。

答案 1 :(得分:3)

iOS 5.0 +:

UIWebView包含UIScrollView以显示其内容,并可由scrollView UIWebView属性访问。因此,实现此目的的一种可能方法是继承UIScrollView并覆盖-touchesShouldBegin:withEvent:inContentView。您可以从UITouch属性中获取tapCount对象的抽头数,该属性可用于过滤掉双击手势,否则调用超级方法。这看起来像是:

-(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在评论中写道,您可以在网页视图顶部添加透明视图,使用点击测试捕获所有触摸事件,并将触摸事件转发到网络视图,除非有双击。

编辑:更新了答案,包含有关子类化UIWebView等的警告。 编辑2:包含iOS 5.0之前的第二个答案

答案 2 :(得分:0)

我认为这样做的方法是在UIWebView上添加UITapGestureRecognizer,然后根据需要过滤双击。

您可以在此处找到示例代码/讨论:

Add a UITapGestureRecognizer to a UIWebView