如何获取当前活动的 UIEvent?
How to get currently active UIEvent?
背景
我有一个自定义 UIWindow 实现,它在 sendEvent 方法中发布通知。然后我有一个自定义视图,一旦添加到 window 层次结构,就会在发布提到的通知后立即从超级视图中删除(即点击任何地方,无论是否在此视图中,都会删除视图)。最后,我有一个按钮可以将此自定义视图添加到视图层次结构中。现在的问题是,当我点击此按钮时,视图被添加到视图层次结构中,但是,在添加自定义视图后,由此点击引起的事件到达我的自定义 UIWindow sendEvent 方法,从而导致自定义视图被添加后立即删除。
问题
我想以某种方式访问当前处于活动状态的任何 UIEvent。这可以做到吗?如果可以,怎么做?
我通过监听通知来解决这个问题,以便跟踪最近的 UIEvent(我在 userInfo 中提供了 UIEvent)。然后,当再次收到通知时,我确保它与自定义视图出现之前发生的事件不是同一事件(如果是,我跳过自定义视图的删除)。
虽然这是对我的问题的回答,但@matt 在对以下 SO 问题的回答中提出的底层问题的解决方案结果要好得多:
背景
我有一个自定义 UIWindow 实现,它在 sendEvent 方法中发布通知。然后我有一个自定义视图,一旦添加到 window 层次结构,就会在发布提到的通知后立即从超级视图中删除(即点击任何地方,无论是否在此视图中,都会删除视图)。最后,我有一个按钮可以将此自定义视图添加到视图层次结构中。现在的问题是,当我点击此按钮时,视图被添加到视图层次结构中,但是,在添加自定义视图后,由此点击引起的事件到达我的自定义 UIWindow sendEvent 方法,从而导致自定义视图被添加后立即删除。
问题
我想以某种方式访问当前处于活动状态的任何 UIEvent。这可以做到吗?如果可以,怎么做?
我通过监听通知来解决这个问题,以便跟踪最近的 UIEvent(我在 userInfo 中提供了 UIEvent)。然后,当再次收到通知时,我确保它与自定义视图出现之前发生的事件不是同一事件(如果是,我跳过自定义视图的删除)。
虽然这是对我的问题的回答,但@matt 在对以下 SO 问题的回答中提出的底层问题的解决方案结果要好得多: