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