2.13. Manipulating a Navigation Controller’s Array of View Controllers

Problem

You would like to directly manipulate the array of view controllers associated with a specific navigation controller.

Solution

Use the viewControllers property of the UINavigationController class to access and modify the array of view controllers associated with a navigation controller:

- (void) goBack{
  /* Get the current array of View Controllers */
  NSArray *currentControllers = self.navigationController.viewControllers;

  /* Create a mutable array out of this array */
  NSMutableArray *newControllers = [NSMutableArray
                                    arrayWithArray:currentControllers];

  /* Remove the last object from the array */
  [newControllers removeLastObject];

  /* Assign this array to the Navigation Controller */
  self.navigationController.viewControllers = newControllers
}

You can call this method inside any view controller in order to pop the last view controller from the hierarchy of the navigation controller associated with the current view controller.

Discussion

An instance of the UINavigationController class holds an array of UIViewController objects. After retrieving this array, you can manipulate it in any way you wish. For instance, you can remove a view controller from an arbitrary place in the array.

Manipulating the view controllers of a navigation controller directly by assigning an array to the viewControllers property of the navigation controller will commit the operation without a transition/animation. If you wish this operation ...

Get iOS 6 Programming Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.