tab icon bar iphone iphone-sdk-3.0 uinavigationcontroller uitabbarcontroller

iphone - icon - ¿Tienes un UITabBAR y un UINavigationController en una aplicación?



uitabbarcontroller swift 4 (2)

Use el asistente para una aplicación de barra de pestañas y configúrelo como lo hace normalmente. 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 configuré en MainWindow.xib que genera el asistente) Configure un UINavigationController * IBOutlet que tenga el controlador de navegación en el XIB conectado:

@interface DescriptiveNameNavViewController : UIViewController { UINavigationController *navigationController; } @property (nonatomic, retain) IBOutlet UINavigationController *navigationController; @end

En el controlador para 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, implemente 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 hará que los mensajes se propaguen a los controladores dentro del UINavigationController como esperabas. 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.

Hola a todos, soy nuevo en el desarrollo de iPhone y no entiendo toda la idea de UINavigationController y UITabBarController. ¿Es uno un sustituto del otro? ¿Cómo combinan ambas aplicaciones, como Tweetie?

Me gustaría que mi aplicación tenga una barra de pestañas persistente en la parte inferior (que parece estar funcionando), pero también una barra de navegación en la parte superior que puede insertar / mostrar vistas en la pantalla sin quitar la barra de pestañas.

  • ¿Cómo puedo lograr esto?
  • ¿Cómo debería ser la jerarquía en IB hasta mi MainWindow.xib con respecto a todos estos controladores?
  • ¿Cuál es la mejor práctica aquí?

Muchas gracias,


Simplemente UINavigationController el controlador de visualización dentro del UINavigationController y coloque el UINavigationController dentro de UITabBar . Esto funcionará bien para ti ...

Ejemplo:

NSMutableArray *tabBarViewControllers = [[NSMutableArray alloc] initWithCapacity:2]; tabBarController = [[UITabBarController alloc] init]; [tabBarController setDelegate:self]; UINavigationController *navigationController = nil; navigationController = [[UINavigationController alloc] initWithRootViewController:<Your View controller1>]; [tabBarViewControllers addObject:navigationController]; [navigationController release]; navigationController = nil; navigationController = [[UINavigationController alloc] initWithRootViewController:<Your View controller2>]; [tabBarViewControllers addObject:navigationController]; [navigationController release]; navigationController = nil; tabBarController = tabBarViewControllers; [tabBarViewControllers release]; tabBarViewControllers = nil;