iosuinavigationcontrollerpushviewcontrollerpopviewcontroller

popping and pushing view controllers in same action


is is possible to pop a view off the navigation stack and then push another straight onto it?

I'm trying to implement a flat hierarchy for this section and would like to have a segmented controller but I can't make the segmented controller look anything liked I want, hence why I'm trying to use the navigation controller.

When a button is clicked I executed this code:

[[self navigationController] popViewControllerAnimated:YES];
        MapsViewController *aViewController = [[MapsViewController alloc]
                                               initWithNibName:@"MapsViewController" bundle:nil];
[self.navigationController pushViewController:aViewController animated:NO];
[aViewController release];

It's popping off ok but theres no sign of any pushing! Any help would be appreciated.


Solution

  •  MapsViewController *aViewController = [[MapsViewController alloc]
                                            initWithNibName:@"MapsViewController" bundle:nil];
         // locally store the navigation controller since
         // self.navigationController will be nil once we are popped
     UINavigationController *navController = self.navigationController;
    
         // retain ourselves so that the controller will still exist once it's popped off
     [[self retain] autorelease];
    
         // Pop this controller and replace with another
     [navController popViewControllerAnimated:NO];//not to see pop
    
     [navController pushViewController:aViewController animated:YES];//to see push or u can change it to not to see.
    

    Or

     MapsViewController *aViewController = [[MapsViewController alloc]
                                            initWithNibName:@"MapsViewController" bundle:nil];
    
    
    UINavigationController *navController = self.navigationController;
    
    //Get all view controllers in navigation controller currently
    NSMutableArray *controllers=[[NSMutableArray alloc] initWithArray:navController.viewControllers] ;
    
    //Remove the last view controller
    [controllers removeLastObject];
    
    //set the new set of view controllers
    [navController setViewControllers:controllers];
    
    //Push a new view controller
    [navController pushViewController:aViewController animated:YES];