全屏UIView子类作为面纱不消耗触摸事件

时间:2011-03-04 20:30:16

标签: iphone objective-c cocoa-touch

我有一个可用的标签栏应用。每个标签都是UINavigationController,其根视图是某种UIViewController,通常是UITableViewController

在应用程序中有一些实例,我希望在某些操作完成之前显示一个全屏“面纱”,其中包含有关正在发生的事情的消息。重点是吞噬UI上的任何触摸,这些触摸将远离操作开始的位置。

面纱是UIView的子类。该类有一个单例实例。显示时,我将其作为UITabBarController视图的子视图插入。视图显示在整个UI上,包括标签栏。太好了!

这是问题所在。我可以点击选项卡和UI更改。我所期待的是,我的面纱视图刚刚吞噬了它。

我已经在我的面纱类中实现了各种触摸{Began | Ended | Moved | Cancelled}方法(作为无操作方法),但触摸仍然被标签栏拾取,坦率地说,任何对象都在下面我偶然碰到了。

我也尝试覆盖其他一些方法,包括nextResponder,hitTest:withEvent:等,但无济于事。

此时我有点难过。我希望有人会有一些圣人的建议。 : - )

感谢。

2 个答案:

答案 0 :(得分:3)

修改框架类的视图层次结构是不安全的。只需将其添加为窗口本身的子视图,您就可以获得更好的服务。至于消费接触,如果进行此更改不起作用,那么您还应验证视图上userInteractionEnabled是否设置为YES。您不必实际实现任何与触摸相关的方法。

答案 1 :(得分:1)

我也有这个问题,想出了一个hacky解决方案。在自定义UIView类的init中,创建一个无法命中的虚拟UIView,例如[[UIView alloc] initWithFrame:CGRectMake(-1, -1, 0, 0)]。或者实际上,我认为任何没有附加到窗口的UIView都可以工作。然后,在hitTest:withEvent:中,让它返回不在您感兴趣的区域内的每个点的虚拟视图。