应用程序变为活动时加载视图控制器

时间:2011-06-17 22:56:17

标签: iphone objective-c ios4

我希望我的应用程序始终在我第一次打开时启动。我有几个视图控制器,当我退出我的应用程序并再次打开它时,我看到我离开的视图控制器。也许我必须调用方法applicationWillTerminate方法。

我使用此代码打开一个新视图:

 UIViewController *control = [[SomeViewController alloc] initWithNibName:@"SomeViewController"
                                                                            bundle:nil];
UINavigationController *navControl = [[UINavigationController alloc]
                                      initWithRootViewController:control];

[self presentModalViewController:navControl animated:NO];

[navControl setNavigationBarHidden:YES];

[control release];
[navControl release];

此代码在将其链接到按钮时效果很好。但是,当我将该代码放在applicationDidBecomeActive方法中时,它不起作用。

3 个答案:

答案 0 :(得分:2)

最简单的方法是在Info.plist中设置UIApplicationExitsOnSuspend。

但这确实不是预期的行为。用户希望看到应用“他们离开的地方”,特别是如果他们只是短暂地离开了应用(例如,因为他们接到了电话)。

您的代码段添加了一个视图控制器,但由于您的应用委托不是UIViewController,因此不太可能。它对删除旧的视图控制器也没有任何作用。

编辑:如果您只需要显示启动画面(或其他内容),那就是这样的:

  • -applicationDidEnterBackground:中,向self.window添加“启动画面”视图(不是视图控制器)。 (iOS从-applicationDidEnterBackground:返回后获取“屏幕截图”并在app-switch动画中使用此屏幕截图;您希望这是用户在切换回应用时看到的内容)
  • -applicationWillEnterForeground:中,执行您想要的任何动画,最终从窗口中删除视图(call -removeFromSuperview)。

编辑2:同样适用于-applicationWillResignActive: / -applicationWillBecomeActive:,但这种情况发生在睡眠/唤醒事件中,这可能不是您想要的......

我会避免使用视图控制器,因为尝试在视图控制器层次结构中窃取视图控制器可能会有问题(例如,您必须弄清楚要从哪个VC呈现它,并且您必须如果用户在VC在屏幕上时给你的应用程序添加了背景,那就做“正确的事”,并且......)

答案 1 :(得分:0)

它在applicationDidBecomeActive中不起作用的原因是该方法仅发送给Application委托,后者不知道presentModalViewController。

我建议在你的appDelegate中实现applicationWillEnterForeground:,它应该将状态恢复到新启动的应用程序(相当于状态在application:didFinishLaunchingWithOptions的末尾:)。

... OR(编辑) 如果你只是想要运行某个viewController(它仍然被加载,对吗?)...例如,如果你有一个标签控制器并且只想转到第一个视图控制器的根,请将以下代码放入applicationWillEnterForeground :

UITabBarController * myTabBar = self.tabBarController;
myTabBar.selectedIndex = 0;  
[[myTabBar.viewControllers objectAtIndex:0] popToRootViewControllerAnimated:NO];

答案 2 :(得分:0)

临时解决方案:

我在applicationWillResignActive方法上使我的应用程序崩溃并且它可以工作。我的应用程序需要在启动时运行动画。但这是有效的,因为下次应用程序运行它就像我第一次打开它时一样。