0

所以我有一个基于 TabBarController 的应用程序,并且在我的一个选项卡中使用 UIAccelerometer。我看到的问题是我可以很好地访问和使用加速度计,直到我切换标签并切换回来。比如说我的加速度计在 tab1 上,然后我单击 tab2 并返回到 tab1 加速度计是关闭的。

在我的 ViewWillAppear 方法中,我将 viewcontroller 设置为 firstresponder,如下所示:

- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];

[self becomeFirstResponder];

[accelerometer setDelegate:self];
...}

加速度计是视图控制器的实例变量。所以我在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 并且是导航中的最后一页)并转发加速度计然后正常工作。在我看来,它并没有真正将视图控制器设置为第一响应者。我希望有一些明显的我没有到达这里。任何帮助将非常感激!!!

4

1 回答 1

0

所以事实证明,我需要在我的 viewController 中重写 viewDidAppear 和 viewDidDisappear 方法。

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self becomeFirstResponder];}

- (void)viewDidDisappear:(BOOL)animated {
[self resignFirstResponder];
[super viewDidDisappear:animated];}

完成此操作后,在 viewController 之间切换后调用了 motionBegan。希望这可以帮助那里的任何人...

于 2011-07-23T15:33:42.747 回答