views:

117

answers:

2

Hello guys,

I have a general design problem with iPhone application. I want to know the main principle how to go from normal view with navigationController to tabBarController with tabs where each tab has it's own navigationController (dont need first navigationController any more).

Let me show you how I made this:

First I added some view with a button to navigationController. AppDelegate adds this navigationController (with view controller of course) as subView to window:

[window addSubview:navigationController.view];

When I get to that new view (with navigationController on top) I click on button that takes me to new view which has tabBarController (with his own navControllers):

SearchViewController *searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchView_iPhone" bundle:nil];
searchViewController.tabBarItem.title = @"FirstTab";
UINavigationController *searchNavigationController = [[UINavigationController alloc] initWithRootViewController:searchViewController];

SettingsViewController *settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsView_iPhone" bundle:nil];
settingsViewController.tabBarItem.title = @"SecondTab";
UINavigationController *settingsNavigationController = [[UINavigationController alloc] initWithRootViewController:settingsViewController];

//Add navigation controllers to tabBar controller
tabBarController = [[UITabBarController alloc] init];
tabBarController.viewControllers = [NSArray arrayWithObjects:searchNavigationController, dictionariesNavigationController, settingsNavigationController, nil];

Ok, I added all views (with navControllers) to tabBarController. All I have to do is to push tabBarController to be seen:

[self.navigationController pushViewController:tabBarController animated:YES];

But after that I see that navigationController from first view is still present on views with tabBars. This is logical, because I pushed tabBarController with navigationController. So I did this to hide it:

self.navigationController.navigationBarHidden = YES;

Now it looks ok. All of the tabBar views has it's own navController.

THE MAIN PROBLEM: When I want to push another view (settingsResultsViewController) from subviewed table (settingsTableViewCell) which is in settingsViewController nothing happens. Here is the code:

SettingsResultsViewController *settingsResultsViewController = [[SettingsResultsViewController alloc] initWithNibName:@"SettingsResultsView_iPhone" bundle:nil];
[self.navigationController pushViewController:settingsResultsViewController animated:YES];

I also tried to push this view with appDelegate like this:

[delegatePhone.settingsViewController.navigationController pushViewController:settingsResultsViewController animated:YES];
[delegatePhone.firstViewController.navigationController pushViewController:settingsResultsViewController animated:YES];

But again nothing happens.

I assume that the main problem is in navigationControllers. The first navigationController is still somewhere in the back while I want to push with current navController on that particular tabBar.

Is there a way to push new view (tabBarController in my case) from first view other than with navigationController ?

All I want is when the button on firstView is clicke that app takes me to tabBarController and forget about firstView (and first navigationController) at all - I dont need them any more.

Hope I made it clear.

Thanks for all your help. I really appriciate it.

A: 

You could display the tab bar controller by calling presentModalViewController:animated: instead of pushing it to a navigation stack. And if you don't need the first navigation controller at all, you should probably replace it with a standard view controller.

Ole Begemann
Thanks for advice but I still can not push another view in tableViewCell in tabBar view.When I test this code I get nil: if (self.navigationController == nil) NSLog(@"navigation is nil"); if (self.parentViewController.navigationController == nil) NSLog(@"parent navigation is nil");How could it be that self and parent navigationControllers are nil ?
borut-t
A: 

The Tweetie author commented in a thread concerning tab bars and nave controllers a while back. Does this thread help?

http://stackoverflow.com/questions/576764/tab-bar-controller-inside-a-navigation-controller-or-sharing-a-navigation-root-v/579087#579087

Joost Schuur
Thats no help for me. I have tried to push tabBarController as modalView (presentModalViewController). But still no luck. I still can not push new view from tableView that is subview of firstTabBar.Could anyone help me to resolve this problem ?
borut-t