I have a project with a NavigationController, that contains into IB the first ViewController to show. That's just the default pattern when creating the project.
In that first viewController, I receive some event that I send to the appDelegate, and I want it to replace that rootview with another one. Not going to a next one.
So I do :
- (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]; }
But that doesn't work, the first viewcontroller is not poped. And the second one is logically displayed with a back button.
I just want to replace that first view with the other one as the start of the navigation process.
The root view controller is simply the view controller that sits at the bottom of the navigation stack. You can access the navigation controller's array of view controllers through its viewControllers property. To access the root view controller, we ask for the first item of the array of view controllers.
From UINavigationController reference:
This method (popViewControllerAnimated:) removes the top view controller from the stack and makes the new top of the stack the active view controller. If the view controller at the top of the stack is the root view controller, this method does nothing. In other words, you cannot pop the last item on the stack.
You can try the setViewControllers:animated:
method instead.
- (void) goNext { NextViewController* nextWindow = [[[NextViewController alloc] initWithNibName:@"NextView" bundle:nil] autorelease]; [self.navigationController setViewControllers:[NSArray arrayWithObject:detailViewController] animated:YES]; }
If the view controller at the top of the stack is the root view controller, popViewControllerAnimated does nothing. In other words, you cannot pop the last item on the stack.
To replace the root view controller use this method:
- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With