为啥自定义 UIWindow 中的 UILongPressGestureRecognizer 没有反映在应用程序的 UIWebview 中?
Posted
技术标签:
【中文标题】为啥自定义 UIWindow 中的 UILongPressGestureRecognizer 没有反映在应用程序的 UIWebview 中?【英文标题】:Why the UILongPressGestureRecognizer in custom UIWindow is not reflecting in UIWebview of the application?为什么自定义 UIWindow 中的 UILongPressGestureRecognizer 没有反映在应用程序的 UIWebview 中? 【发布时间】:2013-07-03 05:11:33 【问题描述】:我已经实现了一个自定义UIWindow
,这将是我的主窗口。我添加了一个UILongPressGestureRecognizer
到它。除了UIWebView
之外,应用程序中的所有视图都会对此做出响应。我对这个特殊的问题有点困惑。
下面是我在UIWindow
中实现UILongPressGestureRecognizer
的方式,
- (id)initWithFrame:(CGRect)frame
self = [super initWithFrame:frame];
if (self)
// Initialization code
UILongPressGestureRecognizer* longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)];
[longPress setMinimumPressDuration:3];
[self addGestureRecognizer:longPress];
return self;
有什么原因可以解决这个问题吗?如何解决?
谢谢!
【问题讨论】:
UIWebview 有自己的私有视图,它们自己处理手势识别器。这可能会妨碍您的窗口响应长按。 @Puneet 如何消除这些手势识别器以使我的 UIWindow 做出相同的响应? 我尝试了下面 Avi Tsadok 提到的方法,它奏效了。此外,如果您不希望 UIWebview 处理任何手势,只需将其 userInteractionEnabled 属性设置为 NO。 @Puneet _longGesture - 这是我在自定义 UIWindow 中提到的 UILongPressGestureRecognizer 的引用吗? 是的。在您的情况下,您创建的 UILongGestureRecogniser 的引用名为 longPress。 【参考方案1】:UIWebView 里面有一个滚动视图,它有自己的手势。 基本上,您可以参考这些手势:
_webView.scrollView.panGestureRecognizer;
因此,您可以在这两个手势之间创建一个条件:
[_webView.scrollView.panGestureRecognizer requireGestureRecognizerToFail:_longGesture];
我自己没试过,但也许会奏效。
【讨论】:
_longGesture - 这是我在UIWindow中提到的UILongPressGestureRecognizer的引用吗? _longGesture 是对长按手势的引用。告诉我它是否适合你 尝试如下,但它不起作用。请建议! EBaseUIWindow *baseWindow = (EBaseUIWindow *) [[UIApplication sharedApplication] keyWindow]; [webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"google.com"]]]; [webview.scrollView.panGestureRecognizer requireGestureRecognizerToFail:[baseWindow longPress]];以上是关于为啥自定义 UIWindow 中的 UILongPressGestureRecognizer 没有反映在应用程序的 UIWebview 中?的主要内容,如果未能解决你的问题,请参考以下文章