应用程序将进入后台 - >转到根视图菜单

时间:2013-09-11 06:53:38

标签: iphone ios objective-c

我正在开发一个具有大约8个视图并使用导航控制器进行导航的应用程序。第一个视图是主菜单。

如果用户按下主页按钮(应用程序确实输入背景),我想要(每个视图)弹出到主视图。

我知道AppDelegate方法applicationDidEnterBackgroundapplicationWillEnterForeground

我知道从导航控制器调用的方法popToRootViewControllerAnimated

我尝试在applicationDidEnterBackground中使用popToRootViewControllerAnimated。 像:

[self.window.rootViewController.navigationController popToRootViewControllerAnimated:YES];

但这不起作用。

能告诉我这项工作的最佳选择吗?

4 个答案:

答案 0 :(得分:9)

我认为你这样试试NSNotificationCenter

applicationDidEnterBackgroundapplicationWillEnterForeground内放置此

[[NSNotificationCenter defaultCenter] postNotificationName:@"popToRoot" object:nil];

并在您的rootViewController's viewDidLoad(始终显示在应用启动时)中添加以下内容:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(popToRootViewControllerAnimated) name:@"popToRoot" object:nil];

然后在rootViewController

中创建一个方法
- (void)popToRootViewControllerAnimated
{
    [self.navigationController popToRootViewControllerAnimated:YES];
}

每当应用程序首次启动时,NSNotificationCenter将初始化名称popToRoot并为此准备方法popToRootViewControllerAnimated

当应用程序转到后台时,NSNotificationCenter会将按摩@"popToRoot"传递给rootViewController's popToRootViewControllerAnimated方法,而viewcontroller会弹出rootview

答案 1 :(得分:2)

你试试这样: -

[self.navigationController popToRootViewControllerAnimated:YES];

在这里用navigationController替换你的navigationController名称。

修改: -

在AppDelegate.h文件中

@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    UINavigationController *navMain;
}

@property (nonatomic, retain) UINavigationController *navMain;

在AppDelegate.m文件中

@synthesize navMain;

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
    self.navMain = [[UINavigationController alloc] initWithRootViewController:self.viewController];
    self.window.rootViewController = self.navMain;
    [self.window makeKeyAndVisible];
    return YES;
}

-(void)applicationDidEnterBackground:(UIApplication *)application
{
    NSLog(@"applicationDidEnterBackground");
    [self.navMain popToRootViewControllerAnimated:YES];
}

尝试编辑anwser

答案 2 :(得分:0)

首先:你应该检查rootviewcontroller是一个navigationController。因为self.window.rootViewController.navigationController通常为零。 为什么? 因为navigationController的navigationController是'nil'。大多数情况下,我将rootViewController设置为navigationController

其次: 当您的应用程序即将退出时,您不应该制作动画内容。你应该做的不是动画

popToRootViewControllerAnimated:NO

答案 3 :(得分:0)

在AppDelegate类中为UINavigationController创建一个属性。在applicationDidEnterBackground:方法中,使用UINavigationController属性调用popToRootViewController方法。假设你的名字是navigationController然后

[self.navigationController popToRootViewControllerAnimated:YES];