Modal UITabBarController

Discussion in 'iOS Programming' started by Echilon, May 22, 2011.

  1. Echilon macrumors newbie

    Nov 27, 2007
    I'm trying to present a TabBarController on top of another TabBarController. My application's MainWindow.xib looks like this:

    Files Owner
    First Responder
    My App App Delegate
        +Nav Controller Subclass (a custom class)
            +Navigation Bar
            +Table View Contoller Subclass (custom class)
            +Tab Bar Item
        +Second View Controller (not yet hooked up)
    I'm trying to display a xib file when an item is clicked in the TableView. This xib file has a TabBarController as it's main view, but when the view displays, the tab bar and navigation bar are both invisible. The code I'm using to display it is:

    MyAppAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
    [delegate.customNavController presentModalViewController:customDetailEditViewController animated:YES];
    If I use the code below to push the view controller onto the stack, I see the correct navigation bar, but the TabBar from the root view controller is shown instead of the one from the view which has been pushed. This is called from the tableViewController (a custom class).

    [delegate.customNavController pushViewController:customDetailEditViewController animated:YES];
    I even tried removing the TabBarController and manually implementing my own TabBar delegates but the same effect occurs (either no NavigationBar or TabBar, or the NavigationBar/TabBar from the root ViewController).

    I've uploaded the source to . I'd really appreciate it if someone with a bt more experience with iOS could take a look.
  2. Echilon thread starter macrumors newbie

    Nov 27, 2007
    The closest I've come so far is presenting a modal view controller inside the first tabbar, so my view looks like this:

        [          ]
        [          ] 
        [          ] 
        [          ] 
        TabBar from the pushed view 
        TabBar from the root view
    To achieve this, I'm using:
        UITabBarController *tabBarController = [[UITabBarController alloc] init];
        	UIViewController *directionsView = [[UIViewController alloc] init];
        	txtDirections = [[UITextView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width, self.view.frame.size.height)]; 
         	[directionsView.view addSubview:txtDirections];
        	IconPickerViewController *iconPicker = [[IconPickerViewController alloc]init];
        	tabBarController.viewControllers = [NSArray arrayWithObjects:recipeDetailEditViewController,directionsView,iconPicker, nil];
        	[directionsView release];
        	[iconPicker release];
        	MyAppAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
        	[delegate.rootNavController presentModalViewController:recipeDetailEditViewController animated:YES];
    This just complicates everything though, since a) It's not ideal as I have two tabbars and b) all controls (all of the editing controls) need to be in the TableViewController so their values can be loaded/saved to edit items. It would be much easier if the pushed view could handle loading/saving and appear on top of the root tabs.

    Surely this must be possible?

Share This Page