Utilisez l'assistant pour une barre d'onglets d'application, et le configurer comme normal. Dans n'importe quel onglet où vous voulez ajouter un contrôleur de navigation, créez-le dans le XIB en utilisant la bibliothèque. Mon XIB a:
- File's Owner DescriptiveNameNavViewController
- First Responder
- View UIVIew
- Navigation Controller UINavigationController
- Navigation Bar UINavigationBar
Notez qu'il n'y a rien dans la vue. Voir viewDidLoad ci-dessous pour savoir où UINavigationController est attaché à l'UIView.
Dans le fichier d'en-tête de ViewController de Tab (que j'ai appelé ici DescriptiveNameNavViewController - il n'y a pas de standard particulier, mais j'utilise [Quelque chose] NavViewController pour me rappeler que ViewController contient un contrôleur de navigation avec . la pile de navigation Ceci est le nom du contrôleur que je situe dans le MainWindow.xib que l'assistant génère) Configurer une UINavigationController * IBOutlet qui a le dispositif de commande de navigation dans le XIB attaché à lui:
@interface DescriptiveNameNavViewController : UIViewController {
UINavigationController *navigationController;
}
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@end
dans le contrôleur pour le DescriptiveNameNavViewController, faites quelque chose comme ceci:
- (void)viewDidLoad {
[super viewDidLoad];
[[self view] addSubview:[navigationController view]];
DescriptiveNameController *aController = [[[DescriptiveNameController alloc ] initWithNibName:@"DescriptiveNameController" bundle:nil ] autorelease];
aController.title = @"Descriptive Title";
//
// app stuff goes here.
//
[self.navigationController pushViewController:aController animated:YES];
[self.navigationController setDelegate:self];
}
La définition du délégué dans le DescriptiveNameNavViewController est très importante, car sinon vous n'obtiendrez pas les méthodes appelées dans les instances DescriptiveNameViewController et tout autre élément que vous insérez dans la pile du contrôleur de navigation.
En DescriptiveNameNavViewController, mettre en œuvre les méthodes de UINavigationControllerDelegate comme celui-ci:
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if ([viewController respondsToSelector:@selector(viewDidAppear:)]) {
[viewController viewDidAppear:animated];
}
}
Et cela provoquera des messages à se propager à des contrôleurs à l'intérieur du UINavigationController comme vous attendez. Il semble que beaucoup de problèmes que les gens rencontrent sont parce que viewDidAppear: ou d'autres méthodes ne sont pas appelées sur les ViewControllers poussés dans le NavigationController.
De toute façon, laissez-moi savoir si plus de détails aideraient.
droite de la bouche du codeur Tweetie: http://stackoverflow.com/questions/576764/tab-bar-controller-inside-a-navigation -controller-or-sharing-a-navigation-root-v – chrissr