繁体   English   中英

UIWebview删除点击以进行聚焦

[英]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以显示其内容,并可通过UIWebViewscrollView属性访问。 因此,一种可行的方法是将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,然后你可以根据需要过滤双击。

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

将UITapGestureRecognizer添加到UIWebView

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM