我有一个可用的标签栏应用。每个标签都是UINavigationController
,其根视图是某种UIViewController
,通常是UITableViewController
。
在应用程序中有一些实例,我希望在某些操作完成之前显示一个全屏“面纱”,其中包含有关正在发生的事情的消息。重点是吞噬UI上的任何触摸,这些触摸将远离操作开始的位置。
面纱是UIView的子类。该类有一个单例实例。显示时,我将其作为UITabBarController
视图的子视图插入。视图显示在整个UI上,包括标签栏。太好了!
这是问题所在。我可以点击选项卡和UI更改。我所期待的是,我的面纱视图刚刚吞噬了它。
我已经在我的面纱类中实现了各种触摸{Began | Ended | Moved | Cancelled}方法(作为无操作方法),但触摸仍然被标签栏拾取,坦率地说,任何对象都在下面我偶然碰到了。
我也尝试覆盖其他一些方法,包括nextResponder,hitTest:withEvent:等,但无济于事。
此时我有点难过。我希望有人会有一些圣人的建议。 : - )
感谢。
答案 0 :(得分:3)
修改框架类的视图层次结构是不安全的。只需将其添加为窗口本身的子视图,您就可以获得更好的服务。至于消费接触,如果进行此更改不起作用,那么您还应验证视图上userInteractionEnabled
是否设置为YES。您不必实际实现任何与触摸相关的方法。
答案 1 :(得分:1)
我也有这个问题,想出了一个hacky解决方案。在自定义UIView类的init
中,创建一个无法命中的虚拟UIView,例如[[UIView alloc] initWithFrame:CGRectMake(-1, -1, 0, 0)]
。或者实际上,我认为任何没有附加到窗口的UIView都可以工作。然后,在hitTest:withEvent:
中,让它返回不在您感兴趣的区域内的每个点的虚拟视图。