2010-07-28 72 views
3

我需要在我的窗口上看到触摸事件,所以我将UIWindow分类为使我成为MYWindow类。我重写了sentEvent函数来接收窗口上的触摸事件,并且所有这些工作都很好。我做了以下实现这一目标:自定义UIWindow方向

self.window = [[MYWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
[window makeKeyAndVisible]; 

我现在面临的问题是,当我这样做,是这个窗口上的viewControllers将不再转动。如果我要使用常规的UIWindow,它们都可以像我打算的那样工作。很明显,我的设置出了问题。

我一直在寻找通过一个UIWindow头文件,有一个名为

- (void)becomeKeyWindow; //override point for subclass, Do Not call directly 

方法我是想实现这个在我的自定义UIWindow类就像我不得不执行的SendEvent:方法?请用这个指向正确的方向。

在此先感谢你们。

回答

4

我想出了问题所在。我在自定义窗口上创建了一个委托,并将其称为导致此问题的“委托”。命名为“aDelegate”解决了这个问题。感谢你的帮助。

+0

+1谢谢,刚刚花了一个多小时调试我的应用程序中的一切来解决这个问题,甚至回到使用XIBs试图解决,但这是有效的解决方案。我事先调查了UIWindow的继承链,以确保我不覆盖现有的“委托”属性,但显然错过了某些东西。回想起来,“委托”是一个非常冒险的名字,无论如何都在一个子类中使用。 – thomh 2012-11-06 18:12:31

0

我只是猜测这里,但我推测这是因为你做MYWindow的关键窗口现在(即使它是透明的),并shouldAutorotateToInterfaceOrientation:UIViewController类,而不是UIWindow的一部分。

所以,即使你可以看到你的其他视图,他们不会再获取他们的轮换事件。

而不是将其设置为UIWindow子类,为什么不在UIView上实现那些添加到视图中需要处理触摸事件的触摸事件?你也可以使它透明,只需要在UIViewController级别保持旋转处理?

+0

我已经划分UIWindow的原因是我有一个密码屏幕,如果在屏幕上没有检测到任何活动(触摸),在一段时间后显示。为了达到这个目的,我使用了sendEvent函数来检测任何viewController的触摸。我不想在我的每个viewController中重复这个相同的代码。如果我只需要一个viewController上的触摸事件,我就可以做到这一点。但是,情况并非如此。其他所有功能都称为很好。我有进出viewController没有任何问题。 – Bittu 2010-07-28 16:43:34

+0

你看看你是否也可以传递运动事件。苹果公司对此有一些指导,但我从来没有这样做过,所以我不确定是否可以通过加速度计数据以外的其他任何东西,然后您必须自行解释。 – iwasrobbed 2010-07-28 16:48:13