我正在尝试将 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/