1

我有一个视图控制器类。当加速度计检测到运动并在委托对象中调用加速度计:didAccelerate:方法时,我想在我的视图中做一些事情。

那个委托对象是我脑子里的问题。目前,我的大脑被冻结了,我不知道有什么更好的方法。让我知道你的想法!

解决方案 1)在我的视图控制器类中,我符合 UIAccelerometerDelegate 协议,并实现该 accelerometer:didAccelerate: 方法。在我的 AppDelegate 类的 -applicationDidFinishLaunching: 方法中,我将该视图控制器对象设置为接收加速方法调用的委托。我认为这不是很好。

解决方案 2)我创建一个名为 AccelerationDelegate 的空白新对象,符合该 UIAccelerometerDelegate 协议,实现该 accelerometer:didAccelerate: 方法,并在我的 AppDelegate 类的 -applicationDidFinishLaunching: 方法中将该视图控制器对象设置为接收方法调用的委托在加速时。

但是对于解决方案 2,我的大脑有点卡住了!如何从该对象内的视图控制器访问视图对象?

这里的问题是,我周围有不止一个视图控制器。我使用标签栏控制器在它们之间切换。

有什么建议我怎么能做到这一点?

4

2 回答 2

2

我同意第二种方法更好。您是要访问当前选定的选项卡视图,还是只访问应用程序中的特定视图。

在任何情况下,我要做的就是UITabViewController在您的中为您设置属性,UIApplicationDelegate以便您可以从委托访问它(您可以通过调用获取应用委托[[UIApplication sharedApplication] delegate])。例如:

YourApplicationDelegate *appDelegate = (YourApplicationDelegate *)[[UIApplication sharedApplication] delegate];
FirstUIViewController *firstViewController = appDelegate.firstViewController;
[firstViewController doStuff];

firstViewController您的委托的属性在哪里。

于 2009-05-05T21:59:51.997 回答
1

如果你的加速特定于一个视图控制器,那么让视图控制器接收必要的信息来改变它自己的子视图是有意义的。但是,最好在视图出现时将视图控制器设置为委托,并在视图消失时将委托设置为 null。(具体来说,- (void) viewWillAppear:- (void) viewWillDisappear:

于 2009-05-06T13:53:52.547 回答