为啥自定义 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 中?的主要内容,如果未能解决你的问题,请参考以下文章

自定义 UIWindow 方向

iOS9:自定义 UIWindow 使状态栏消失

iOS9用自定义uiwindow覆盖状态栏 - 位置错误

iOS:为啥 UIWindow 不显示?

为啥我看不到我的新 UIWindow?

SwiftUI - 在 UIWindow 上显示视图