5

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

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

我知道 AppDelegate 方法applicationDidEnterBackgroundapplicationWillEnterForeground.

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

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

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

但这不起作用。

你能告诉我这份工作的最佳选择是什么吗?

4

4 回答 4

10

我想你可以这样尝试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 popToRootViewControllerAnimatedviewcontrollerrootview

于 2013-09-11T07:12:23.833 回答
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

于 2013-09-11T06:55:35.047 回答
0

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

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

popToRootViewControllerAnimated:NO
于 2013-09-11T06:59:02.123 回答
0

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

[self.navigationController popToRootViewControllerAnimated:YES];
于 2013-09-11T07:00:46.697 回答