In the appropriate button's action method, initialize the SecondViewController, then assemble an NSArray consisting of two elements: the RootViewController and the newly initialized SecondViewController (in that order, i.e. Root at index 0 and Second at index 1).
Then call the NavigationController's setViewControllers:animated: method, and pass the array of view controllers as the first argument. Remember to release the SecondViewController after calling this method, or autorelease it upon initialization to avoid a memory leak.
Just to clarify, this will cause the FirstViewController to be released by the NavigationController.
Sample:
- (void) goToSecondViewController
{
RootViewController *root = [[self.navigationController viewControllers] objectAtIndex:0];
SecondViewController *second = [[[SecondViewController alloc] init] autorelease];
NSArray *controllersArray = [NSArray arrayWithObjects: root, second, nil];
[self.navigationController setViewControllers:controllersArray animated:YES];
}
Reference: UINavigationController Class Reference