iPhone – 在导航控制器中replacerootview

我有一个NavigationController的项目,包含到IB显示的第一个ViewController。 这只是创build项目时的默认模式。

在那第一个viewController中,我收到了一些事件,我发送到appDelegate,我想它用另一个replacerootview。 不要去下一个。

所以我这样做:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. // Add the navigation controller's view to the window and display. self.window.rootViewController = self.navigationController; [self.window makeKeyAndVisible]; return YES; } - (void) goNext { [self.navigationController popViewControllerAnimated:NO]; NextViewController* nextWindow = [[[NextViewController alloc] initWithNibName:@"NextView" bundle:nil] autorelease]; [self.navigationController pushViewController:nextWindow animated:NO]; } 

但是,这是行不通的,第一个viewcontroller没有poped。 第二个逻辑上显示一个后退button。

我只是想把第一个视图replace成另一个视图作为导航过程的开始。

从UINavigationController参考 :

这个方法(popViewControllerAnimated :)从堆栈中删除顶部视图控制器,并使堆栈的新顶部成为活动视图控制器。 如果堆栈顶部的视图控制器是根视图控制器,则此方法不执行任何操作。 换句话说,你不能popup堆栈中的最后一个项目。

你可以尝试setViewControllers:animated:方法。

 - (void) goNext { NextViewController* nextWindow = [[[NextViewController alloc] initWithNibName:@"NextView" bundle:nil] autorelease]; [self.navigationController setViewControllers:[NSArray arrayWithObject:detailViewController] animated:YES]; } 

如果堆栈顶部的视图控制器是根视图控制器,那么popViewControllerAnimated将不执行任何操作。 换句话说,你不能popup堆栈中的最后一个项目。

要replace根视图控制器,请使用以下方法:

 - (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated