我在我的视图控制器中放置了motionBegan:withEvent:方法来查看它是否可行,但它没有被调用。在viewWillAppear
中,我将视图控制器设置为第一个响应者,并从canBecomeFirstResponder
返回YES。
此视图控制器位于拆分视图的主窗格中,因此可能在我摇动设备之前更改了第一个响应者。
但我真正的问题是如何将所有动作事件传递给我的app委托中的处理程序?我是否真的必须拥有所有视图控制器中的motionBegan:withEvent:方法或所有第一响应者的委托?是不是有办法让这样的事件在没有在每个UIResponder中插入代码的情况下流向响应者链?似乎会有,但我还没有指出如何做到这一点。
答案 0 :(得分:1)
最简单的方法是在-sendEvent:
覆盖UIApplication
,然后您就可以控制所有事件
您可以使用此课程
int retVal = UIApplicationMain(argc, argv, @"myApplication", @"myAppDelegate");
另一种解决方案是制作类别或展开-viewWillAppear:
more info
答案 1 :(得分:0)
我在传递中所做的是创建一个实现motionBegan方法的UIWindow类。在那个motionBegan方法中,我广播了一个自定义的NSNotification。然后,在应用程序中想要运动事件的任何地方,只需为运动通知添加一个观察者。
由于类别将方法添加到对象的每个实例,因此即使是系统创建的窗口也会获取您的motionBegan方法,并做正确的事情。它工作得很漂亮。