如何在加速时从视图控制器中外包视图更改操作?
-
05-07-2019 - |
题
我有一个视图控制器类。当加速度计检测到移动并调用委托对象中的加速计:didAccelerate:方法时,我想在视图中做一些事情。
这个委托对象是我脑中的问题。目前,我的大脑已经冻结了,我不会得到更好的东西。让我知道你的想法!
解决方案1) 在我的视图中,控制器类符合UIAccelerometerDelegate协议,并实现了加速度计:didAccelerate:方法。 在我的AppDelegate类的-applicationDidFinishLaunching:方法中,我将该视图控制器对象设置为在加速时接收方法调用的委托。我认为这不是很好。
解决方案2) 我创建了一个名为AccelerationDelegate的空白新对象,符合UIAccelerometerDelegate协议,实现了加速度计:didAccelerate:方法,并在我的AppDelegate类的-applicationDidFinishLaunching:方法中,我将视图控制器对象设置为接收方法调用加速时的委托。
但对于解决方案2,我的大脑卡住了一点点!如何从该对象内的视图控制器访问视图对象?
这里的问题是,我有多个视图控制器。我使用标签栏控制器在它们之间切换。
我有什么建议可以做到这一点吗?
解决方案
如果您的加速度特定于一个视图控制器,那么让视图控制器接收更改其自己的子视图所需的信息是有意义的。但是,最好在视图出现时将视图控制器设置为委托,并在委托消失时将其设置为null。 (具体来说, - (void)viewWillAppear:
和 - (void)viewWillDisappear:
)
其他提示
我同意第二种方法更好。您是希望仅访问当前选定的标签视图,还是只访问应用中的特定视图。
在任何情况下,我要做的是在 UIApplicationDelegate
中为 UITabViewController
设置属性,以便您可以从委托中访问它(您可以获取app委托通过调用 [[UIApplication sharedApplication] delegate]
)。例如:
YourApplicationDelegate *appDelegate = (YourApplicationDelegate *)[[UIApplication sharedApplication] delegate];
FirstUIViewController *firstViewController = appDelegate.firstViewController;
[firstViewController doStuff];
其中 firstViewController
是您委托的属性。