当我双击网站的一部分时,UIWebView通常专注于所选内容,现在我希望UIWebView忽略双击,但仍然可以与之交互。
我该怎么做?
答案 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,然后根据需要过滤双击。
您可以在此处找到示例代码/讨论: