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

时间:2011-03-27 10:22:05

标签: iphone cocoa-touch ios

我有一个UIWindow,windowLevel设置为UIWindowLevelStatusBar + 1。此窗口具有一个阻止状态栏的半透明视图。我有时需要将视图中的触摸事件传递给状态栏。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

因此,似乎可以通过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上传一个更新版本的更新版本,看看苹果会做多少抱怨。

编辑 - 4月7日:
获得Apple批准。工作完美无缺。

答案 1 :(得分:2)

您可能会在github上找到此组件。

否则,Cocoa with Love博客文章可能对阅读非常有用。

答案 2 :(得分:1)

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

查看UIView Class Reference了解更多信息。

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

相关问题