我正在开发一个具有大约8个视图并使用导航控制器进行导航的应用程序。第一个视图是主菜单。
如果用户按下主页按钮(应用程序确实输入背景),我想要(每个视图)弹出到主视图。
我知道AppDelegate方法applicationDidEnterBackground
和applicationWillEnterForeground
。
我知道从导航控制器调用的方法popToRootViewControllerAnimated
。
我尝试在applicationDidEnterBackground中使用popToRootViewControllerAnimated。 像:
[self.window.rootViewController.navigationController popToRootViewControllerAnimated:YES];
但这不起作用。
能告诉我这项工作的最佳选择吗?
答案 0 :(得分:9)
我认为你这样试试NSNotificationCenter
:
在applicationDidEnterBackground
和applicationWillEnterForeground
内放置此
[[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];