This is how to add the NavigationController programmatically (e.g. in you AppDelegate)
UIViewController *viewController1, *viewController2;
viewController1 = [[[UIViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease];
UINavigationController *navigationcontroller = [[[UINavigationController alloc] initWithRootViewController:viewController1] autorelease];
viewController2 = [[[UIViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease];
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:navigationcontroller, viewController2, nil];
If you have a tableview in the Viewcontroller1 you can access the Navigationcontroller by using self.navigationController
e.g. in the didSelectRowAtIndexPath
to open a DetailView
eg.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
}
In this example the detailViewController inits with a NIB file, which adds a navigation bar with a back button.
But if you init the detailViewController
programmatically aswell, you can add an action (GoBack) to a UIBarButtonItem
to remove the detailViewController
from its navigationcontroller.
-(void) GoBack
{
[self.navigationController popViewControllerAnimated:YES];
}