iPhone - 替换导航控制器中的rootview

Oli*_*ver 40 iphone replace root uinavigationcontroller

我有一个带有NavigationController的项目,它包含IB中要显示的第一个ViewController.这只是创建项目时的默认模式.

在第一个viewController中,我收到一些我发送到appDelegate的事件,我希望它用另一个替换rootview.不会去下一个.

所以我这样做:

- (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];
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,第一个viewcontroller没有poped.第二个是逻辑显示的后退按钮.

我只想将第一个视图替换为另一个视图作为导航过程的开始.

alb*_*amg 84

UINavigationController参考:

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

您可以尝试使用该setViewControllers:animated:方法.

- (void) goNext {

    NextViewController* nextWindow = [[[NextViewController alloc] initWithNibName:@"NextView" bundle:nil] autorelease];
    [self.navigationController setViewControllers:[NSArray arrayWithObject:detailViewController] animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

  • 更现代的版本:`UIViewController*cont = [[UIStoryboard storyboardWithName:@"MainStoryboard"bundle:nil] instantiateViewControllerWithIdentifier:@"MySceneId"];``self.navigationController.viewControllers = @ [cont];` (15认同)

Fel*_*lix 17

如果堆栈顶部的视图控制器是根视图控制器,则popViewControllerAnimated不执行任何操作.换句话说,您无法弹出堆栈中的最后一项.

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

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated
Run Code Online (Sandbox Code Playgroud)