ios iphone uinavigationbar uibarbuttonitem

ios - Agregar un UIBarButtonItem programáticamente a UINavigationBar



iphone (4)

Dejé caer una UINavigationBar de UIInterfaceBuilder en UIInterfaceBuilder . UIBackBarButton esta vista de manera modal y solo quiero que un UIBackBarButton vuelva a mi última vista. Tengo una salida y propiedad a esta UINavigationBar declarada. Pensé en mi método viewDidLoad , podría crear un UIBackButton como este:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonItemStyleBordered target:self action:@selector(goBack)]; self.navigationItem.backBarButtonItem = backButton; [backButton release];

Pero no veo mi UIBackBarButtonItem en la UINavigationBar . Creo que estoy haciendo algo mal aquí porque no creo que mi UINavigationBar sepa que estoy tratando de agregar este UIBackBarButtonItem de esta manera. ¿Tendré que crear una NSArray , poner el botón en ella y configurar los elementos para la barra de navegación en su lugar?

Estoy confundido sobre cómo funciona la propiedad navigationItem frente a los setItems de UINavigationBar también. Cualquier ayuda sería apreciada. ¡Gracias!


Está intentando configurar el elemento del botón Atrás en una vista modal que no agrega un elemento BackBarButtonItem. Esto es lo que hace que el botón (o cualquier tipo de botón de retroceso) no se muestre. El BackBarButtonItem se usa principalmente con los Controladores de Vista Empujados que tienen un Botón Atrás agregado desde el elemento primario (siguiente elemento a continuación) cuando presiona un nuevo controlador de vista (elemento superior). La documentación de Apple UINavigationItem dice:

Cuando este elemento es el elemento posterior de la barra de navegación, cuando es el siguiente elemento debajo del elemento superior, puede representarse como un botón de retroceso en la barra de navegación. Utilice esta propiedad para especificar el botón de retroceso. El objetivo y la acción del elemento del botón de la barra posterior que establezca deben ser nulos. El valor predeterminado es un elemento del botón de barra que muestra el título del elemento de navegación.

Para obtener el botón Atrás en el lado izquierdo como desee, intente cambiar

self.navigationItem.backBarButtonItem = backButton;

a

self.navigationItem.leftBarButtonItem = backButton;


Hacer una llamada como esta desde un controlador de vista

{ NextViewController* vcRootView = [[NextViewController alloc] initWithNibName:@"NextView" bundle:[NSBundle mainBundle]]; UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:vcRootView]; [vcRootView release]; [self.navigationController presentModalViewController:navController animated:YES]; [navController release]; }

presentará NextViewController como una vista modal en la vista de llamada y NextViewController tendrá un control de navegación para ella.

En el archivo de implementación de NextViewController todo lo que necesita es esto

- (void)viewDidLoad { [super viewDidLoad]; UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(barButtonBackPressed:)]; self.navigationItem.leftBarButtonItem = backButton; [backButton release]; } -(void)barButtonBackPressed:(id)sender{ [self dismissModalViewControllerAnimated:YES]; }

Tener el botón Atrás para descartar la vista modal. Espero eso ayude.


Puede utilizar estos configuradores sin crear un nuevo UIBarButtonItem:

[self.navigationItem.leftBarButtonItem setAction:@selector(doBackButton:)]; [self.navigationItem.leftBarButtonItem setTarget:self];


Utilice el siguiente fragmento de código:

//Add button to NavigationController UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@“back”, @"") style:UIBarButtonItemStylePlain target:self action:@selector(goBack)]; self.navigationItem.leftBarButtonItem = backButton; //Perform action on back Button - (void) goBack { // Go back task over-here }

Los diferentes tipos de estilos disponibles son:

UIBarButtonItemStylePlain, UIBarButtonItemStyleBordered, UIBarButtonItemStyleDone