我有一个可用的选项卡栏应用程序。每个标签是一个UINavigationController
,其根视图是某种UIViewController
,通常是UITableViewController
。全屏UIView子类作为不消耗触摸事件的面纱
在应用程序中有一些情况下,我想显示一个全屏“面纱”,并显示有关正在发生的事情的消息,直到某个操作完成。关键是要吞噬任何接触操作开始的用户界面。
面纱是一个UIView子类。这个类有一个单例实例。显示时,我将其作为UITabBarController
视图的子视图插入。该视图出现在整个用户界面上,包括标签栏。大!
这是问题所在。我可以点击标签和UI更改。我本来期望的是,我的面纱观只会吞噬一切。
我已经在我的面纱类中实现了各种触摸{开始|结束|移动|取消}方法(作为无所事事的方法),但触摸仍然由标签栏拾取,坦然地被任何对象无论我碰到什么。
我也尝试覆盖一些其他方法,包括nextResponder,hitTest:withEvent :,等,无济于事。
我在这一点上有点难住。我希望有人会有一些圣人的建议。 :-)
谢谢。
@ Kevin-Ballard:谢谢你。所以我按照你的建议达到了同样的视觉效果:将面纱作为委托人窗口的子视图。而且,面纱的'userInteractionEnabled'标志被设置为YES。我评论了触控处理方法的空实现。这些触动继续传递到基本观点。任何其他想法? – 2011-03-04 20:44:14
@MarkGranoff:我认为它也会失败,如果你留下null实现?你把它插在窗口的根部?我可以为你的行为考虑的最可能的原因是,如果一个超级视图有一个UIGestureRecognizer,但是如果你在窗口的根目录,那么情况并非如此。我唯一能想到的其他事情就是你的阿尔法。您是否在视图中设置了“alpha”属性?如果'alpha'为'0.05'或更少,触摸跳过视图。它应该设置为'1',你的视图应该没有背景色。 – 2011-03-04 20:48:39
@ Kevin-Ballard:是的,有或没有空实现,相同的行为。没有使用UIGestureRecognizers,至少我没有明确表示。 alpha属性设置为0.65。所以我将它设置为1,并使用clearColor,以便我可以看到可能发生的情况。仍然失败。顺便说一句,这个视图是用这样的代码插入的[[myApp delegate] .window addSubview:[Veil theVeil]]'。这当然有效(我看到了面纱),我想不出以另一种方式“以正确的方式”。真是奇怪。 – 2011-03-04 20:58:21