utiliza el asistente para una barra de aplicaciones Tab y configurarlo como normal. En cualquier pestaña donde desee agregar un controlador de navegación, créelo en el XIB utilizando la biblioteca. Mi XIB tiene:
- File's Owner DescriptiveNameNavViewController
- First Responder
- View UIVIew
- Navigation Controller UINavigationController
- Navigation Bar UINavigationBar
Tenga en cuenta que no hay nada en la vista. Consulte viewDidLoad a continuación para ver dónde se conecta el UINavigationController a UIView.
En el archivo de encabezado para ViewController de la pestaña (que aquí he llamado DescriptiveNameNavViewController - no hay un estándar particular para esto, pero utilizo [Something] NavViewController para recordarme que este ViewController contiene un controlador de navegación con . la pila de navegación Este es el nombre del controlador que puse en el MainWindow.xib que el asistente genera) Establecer un UINavigationController * IBOutlet que tiene el control de navegación en el XI ter que se le atribuye:
@interface DescriptiveNameNavViewController : UIViewController {
UINavigationController *navigationController;
}
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@end
en el controlador para el DescriptiveNameNavViewController, haga algo como esto:
- (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];
}
Configurar el delegado en el DescriptiveNameNavViewController es muy importante, porque de lo contrario no obtendrá los métodos llamados que espera en las instancias de DescriptiveNameViewController y cualquier otra cosa que inserte en la pila del controlador de navegación.
En DescriptiveNameNavViewController, poner en práctica los métodos UINavigationControllerDelegate como este:
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if ([viewController respondsToSelector:@selector(viewDidAppear:)]) {
[viewController viewDidAppear:animated];
}
}
Y eso va a hacer que los mensajes consiguen propagan a los controladores dentro de la UINavigationController como se esperaba. Parece que muchos de los problemas que encuentran las personas se deben a que viewDidAppear: u otros métodos no se invocan en ViewControllers insertados en NavigationController.
De todos modos, avíseme si más detalle ayudaría.
directamente de la boca del codificador Tweetie: http://stackoverflow.com/questions/576764/tab-bar-controller-inside-a-navigation -controller-or-sharing-a-navigation-root-v – chrissr