ios - WebView 和 UISwipeGestureRecognizer

标签 ios iphone objective-c uiswipegesturerecognizer

我正在尝试将 UISwipeGestureRecognizer 附加到 webview。这可行,但我还需要能够上下滚动 Web View 。

这是我的代码:

UISwipeGestureRecognizer *upSwipeGesture = [[UISwipeGestureRecognizer alloc] 
initWithTarget:self action:@selector(tapAction)];
upSwipeGesture.direction = UISwipeGestureRecognizerDirectionUp;
upSwipeGesture.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:upSwipeGesture];

[webView.scrollView.panGestureRecognizer requireGestureRecognizerToFail:upSwipeGesture];

如果我注释掉最后一行,则 web View 会滚动但无法识别该手势。如果我不注释掉最后一行,那么手势会被识别,但 webview 不会滚动。

我希望能够滚动并识别手势。有任何想法吗?谢谢!

最佳答案

UIWebView 有自己的私有(private) View ,也有附加的手势识别器。因此,优先规则会阻止添加到 UIWebView 的任何手势识别器正常工作。

一种选择是实现 UIGestureRecognizerDelegate 协议(protocol)并实现方法 gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer。对于其他点击手势,从此方法返回 YES。

这样你就可以调用你的 tap 处理程序,并且 web view 仍然会被调用。

试试这个,

UISwipeGestureRecognizer *upSwipeGesture = [[UISwipeGestureRecognizer alloc] 
initWithTarget:self action:@selector(tapAction)];
upSwipeGesture.direction = UISwipeGestureRecognizerDirectionUp;
upSwipeGesture.cancelsTouchesInView = NO;
upSwipeGesture.delegate=self;
[self.view addGestureRecognizer:upSwipeGesture];

实现这个委托(delegate)方法,

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}

关于ios - WebView 和 UISwipeGestureRecognizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20608193/

相关文章:

iphone - 有没有办法为给定的 NSManagedObject 检索一组或一组键?

iphone - 无法重现应用审查发现的崩溃。谁能帮助理解这份崩溃报告?

ios 7 图像选择器在 popover 中的错误行为

ios - 如何在所有 View 中显示标签栏

ios - 即使允许访问文件,startAccessingSecurityScopedResource() 也会返回 false

ios - Google登录权限列表在授权之间进行更改

c# - 使用 iPhone Apple 推送通知提供程序 (apns-sharp) 时出现 SslStream.AuthenticateAsClient 异常

ios - 将数据从一个 View 传递到另一个 View (Storyboard,iOS)

objective-c - 当在我的 iPhone 应用程序项目中使用指南针模式时,MKMapView 相反

javascript - 在非文本字段上通过 JavaScript 打开 iPad 的键盘?