1

Bonjour les gars,Comment naviguer correctement de NavigationController à tabBarController avec ses propres navigationControllers

J'ai un problème de conception générale avec l'application iPhone. Je veux savoir le principe principal comment passer de la vue normale avec navigationController à tabBarController avec des onglets où chaque onglet a son propre navigationController (ne pas besoin de premier navigationController plus).

Permettez-moi de vous montrer comment je fait ceci:

D'abord, j'ajouté une vue avec un bouton pour NavigationController. AppDelegate ajoute ce NavigationController (avec vue sur le contrôleur bien sûr) comme sous-vue à la fenêtre:

[window addSubview:navigationController.view]; 

Quand je reçois à cette nouvelle vue (avec NavigationController sur le dessus) je clique sur le bouton qui me prend à la nouvelle vue qui a tabBarController (avec ses propres 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, j'ai ajouté toutes les vues (avec navControllers) à tabBarController. Tout ce que je dois faire est de pousser tabBarController à voir:

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

Mais après que je vois que NavigationController de la première vue est toujours présent sur les vues avec tabBars. C'est logique, parce que j'ai poussé tabBarController avec navigationController. Donc, je l'ai fait pour le cacher:

self.navigationController.navigationBarHidden = YES; 

Maintenant ça a l'air ok. Toutes les vues tabBar ont leur propre navController.

LE PROBLÈME PRINCIPAL: Lorsque je veux pousser une autre vue (settingsResultsViewController) de la table sous-visualisée (settingsTableViewCell) qui est dans settingsViewController rien ne se passe. Voici le code:

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

J'ai essayé aussi de pousser ce point de vue avec appDelegate comme ceci:

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

Mais encore une fois rien ne se passe.

Je suppose que le problème principal est dans les contrôleurs de navigation. Le premier navigationController est encore quelque part à l'arrière alors que je veux pousser avec navController actuel sur ce tabBar particulier.

Existe-t-il un moyen de pousser une nouvelle vue (tabBarController dans mon cas) à partir de la première vue autre que navigationController? Tout ce que je veux, c'est quand le bouton sur firstView est clicke que cette application m'amène à tabBarController et oublie firstView (et first navigationController) - je n'en ai plus besoin.

J'espère que j'ai été clair.

Merci pour votre aide. Je l'apprcie vraiment.

+0

Je googlé pour la solution et quelqu'un dit que je dois mettre tabBarController en tant que contrôleur de vue racine. Est-ce correct? Comment puis je faire ça ? –

Répondre

0

Vous pouvez afficher le contrôleur de la barre d'onglets en appelant le presentModalViewController:animated: au lieu de le placer dans une pile de navigation. Et si vous n'avez pas du tout besoin du premier contrôleur de navigation, vous devriez probablement le remplacer par un contrôleur de vue standard.

+0

Merci pour les conseils, mais je ne peux toujours pas pousser une autre vue dans tableViewCell dans la vue tabBar. Lorsque je teste ce code, je reçois zéro: if (self.navigationController == nul) \t NSLog (@ "navigation is nil"); if (self.parentViewController.navigationController == nul) \t NSLog (@ "parent navigation est nul"); Comment se peut-il que les contrôleurs de navigation self et parent soient nuls? –

0

L'auteur de Tweetie a commenté un fil de discussion concernant les barres d'onglets et les contrôleurs de nefs. Est-ce que ce fil aide?

Tab bar controller inside a navigation controller, or sharing a navigation root view

+0

C'est pas d'aide pour moi. J'ai essayé de pousser tabBarController comme modalView (presentModalViewController). Mais toujours pas de chance. Je ne peux toujours pas pousser la nouvelle vue de tableView qui est sous-vue de firstTabBar. Quelqu'un pourrait-il m'aider à résoudre ce problème? –