所以我有一个基于TabBarController的应用程序,并在我的一个标签中使用UIAccelerometer。我看到的问题是,我可以正常访问和使用加速度计,直到我切换标签并切换回来。比方说我的加速度计在tab1上,我点击tab2然后返回tab1加速度计关闭。
在我的ViewWillAppear方法中,我将viewcontroller设置为firstresponder,如下所示:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self becomeFirstResponder];
[accelerometer setDelegate:self];
...}
accelerometer是viewcontroller的实例变量。所以我在http://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/EventHandlingiPhoneOS.pdf本指南中读到,如果你将加速计代表设置为零,手机将关闭它以延长电池寿命。注意到,我从viewWillDisappear:方法中删除了那行代码,现在这个方法非常小:
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
//commented out the line below and no dice
//[accelerometer setDelegate:nil];
if([[self tableView]isEditing])
[[self tableView]setEditing:NO];
[self resignFirstResponder];
}
仔细阅读SO和网络已经导致了很少的信息。我在这里可以给出的唯一其他信息是,如果我来回切换标签,我可以向后导航一个页面(它还有一个navigationController并且是导航中的最后一页)并转发加速度计然后正常工作。在我看来,它并没有真正将视图控制器设置为第一响应者。我希望有一些明显的事情我不会来这里。任何帮助将不胜感激!!!
答案 0 :(得分:0)
事实证明我需要在viewController中覆盖viewDidAppear和viewDidDisappear方法。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self becomeFirstResponder];}
- (void)viewDidDisappear:(BOOL)animated {
[self resignFirstResponder];
[super viewDidDisappear:animated];}
执行此操作后,在viewControllers之间切换后调用motionBegan。希望这能帮助那里的任何人......