iOS中的触摸事件转发

Posted

技术标签:

【中文标题】iOS中的触摸事件转发【英文标题】:Touch event forwarding in iOS 【发布时间】:2014-07-31 20:55:38 【问题描述】:

我有一个 UI 组件,我想在我的应用程序中显示,以这样一种方式,任何触摸事件都会将其关闭(尽管触摸组件本身会产生与触摸它外部不同的结果)。

我当前的解决方案是拥有一个自定义 UIWindow 子类,它可以正确处理触摸并位于整个屏幕的顶部。但是,我不希望触摸被消耗,而是转发到它后面的任何 UI 元素(即我希望触摸触发窗口内的某些内容,但仍将事件转发到窗口后面的视图)。

我尝试转发触摸事件的方式是在 -[MyWindow sendEvent:]:

NSUInteger superWindowIndex = [[UIApplication sharedApplication].windows indexOfObject:self];
if (superWindowIndex == 0 || superWindowIndex == NSNotFound) 
    [super sendEvent:event];
 else 
    [[UIApplication sharedApplication].windows[superWindowIndex - 1] sendEvent:event];

然而,这并没有像我希望的那样奏效。

实现我想要做的事情的最佳方式是什么? UIWindow 是正确的方法吗? 谢谢!

【问题讨论】:

【参考方案1】:

我的解决方案不是转发触摸,而是将您的 UI 组件包含在另一个覆盖所有 UIWindow 的 View 中。然后,您可以将 TapGesture 添加到主 UI 之外的区域。

【讨论】:

以上是关于iOS中的触摸事件转发的主要内容,如果未能解决你的问题,请参考以下文章

iOS:如何将触摸事件从子视图转发到超级视图? [复制]

使用后将覆盖 UIView 的触摸事件转发到下面的 UIScrollView

将触摸事件从覆盖 UIView 转发到 UIWebView / 如何从代码将触摸事件发送到 uiwebview

仅将触摸事件转发到被触摸的视图

iOS 8.x 中的 UIAlertController 无法响应触摸事件,触摸事件是不是发送到键窗口对象?

iOS 不会将触摸转发到以下视图