我希望我的应用程序始终在我第一次打开时启动。我有几个视图控制器,当我退出我的应用程序并再次打开它时,我看到我离开的视图控制器。也许我必须调用方法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方法中时,它不起作用。
答案 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方法上使我的应用程序崩溃并且它可以工作。我的应用程序需要在启动时运行动画。但这是有效的,因为下次应用程序运行它就像我第一次打开它时一样。