将触摸事件传递给iOS状态栏

我有一个UIWindow与windowLevel设置为UIWindowLevelStatusBar + 1。 这个窗口有一个单一的半透明的视图,阻止状态栏。 我需要将触摸事件从视图传递到状态栏。 有任何想法吗?

所以,UIWindow的自定义子类似乎可以覆盖hitTest:withEvent:手动检测子视图中的触摸,并始终返回nil。

 - (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event { if ([event type]==UIEventTypeTouches) { UIView *v=[super hitTest:point withEvent:event]; if (customSubViewthatCoversStatusBarOnly==v) //doLotsOfCoolStuff } return nil; } 

状态栏识别所有的触摸,所以没有滚动到顶部,返回呼叫,VoiceOver等破损。我仍然可以拦截状态栏上的水龙头。

我刚刚砍了这个。 我可能会在本周晚些时候上传一个更新到App Store的更成熟的版本,看看苹果会抱怨多less。

编辑 – 4月7日:
被苹果批准。 作品完美无瑕。

你可能会发现这个组件有用的github 。

否则, 可爱与爱博客也许是真正有用的阅读。

据我了解,你应该使用- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event来实现该行为。 基本上,如果想要处理触摸事件或者[super hitTest:point withEvent:event] ,你要么返回自己,要么让状态栏处理触摸事件。

查看更多的UIView类参考 。

编辑:正如乔纳森所说,苹果可能不会批准这一点。