Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iPhone - Replacing rootview in navigation controller

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.

like image 858
Oliver Avatar asked Jul 16 '11 12:07

Oliver


People also ask

How do I get navigation controller Viewcontroller?

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.


2 Answers

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]; } 
like image 59
albertamg Avatar answered Sep 21 '22 23:09

albertamg


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 
like image 44
Felix Avatar answered Sep 22 '22 23:09

Felix