¿Cómo agregar un botón a UINavigationBar mediante programación?
¿Cómo agregar un botón a UINavigationBar mediante programación?
Respuestas:
Código de muestra para configurar el rightbutton
a NavigationBar
.
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStyleDone target:nil action:nil];
UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Title"];
item.rightBarButtonItem = rightButton;
item.hidesBackButton = YES;
[bar pushNavigationItem:item animated:NO];
Pero normalmente tendría un NavigationController
que le permitirá escribir:
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationItem.rightBarButtonItem = rightButton;
[rightbutton release]
a ARC (que no existía en el momento en que se escribió este comentario originalmente).
Las respuestas anteriores son buenas, pero me gustaría desarrollarlas con algunos consejos más:
Si desea modificar el título del botón de retroceso (la flecha-y que mira a la izquierda de la barra de navegación) DEBE hacerlo en el controlador de vista ANTERIOR, no en el que se mostrará. Es como decir "oye, si alguna vez presionas otro controlador de vista encima de este, llama al botón de retroceso" Atrás "(o lo que sea) en lugar del predeterminado".
Si desea ocultar el botón de retroceso durante un estado especial, como mientras se muestra un UIPickerView, use self.navigationItem.hidesBackButton = YES;
y recuerde volver a configurarlo cuando deje el estado especial.
Si desea mostrar uno de los botones simbólicos especiales, use el formulario initWithBarButtonSystemItem:target:action
con un valor comoUIBarButtonSystemItemAdd
Recuerde, el significado de ese símbolo depende de usted, pero tenga cuidado con las Pautas de interfaz humana. El uso de UIBarButtonSystemItemAdd para significar que eliminar un elemento probablemente hará que su solicitud sea rechazada.
Añadiendo un botón personalizado a la barra de navegación (con imagen para buttonItem y especificando el método de acción (void) openView {} y).
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, 32, 32);
[button setImage:[UIImage imageNamed:@"settings_b.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(openView) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barButton=[[UIBarButtonItem alloc] init];
[barButton setCustomView:button];
self.navigationItem.rightBarButtonItem=barButton;
[button release];
[barButton release];
El siguiente ejemplo mostrará un botón con el título "Contacto" en la barra de navegación de la derecha. Su acción llama a un método llamado "contacto" desde el controlador de vista. Sin esta línea, el botón derecho no es visible.
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Contact"
style:UIBarButtonItemStylePlain target:self action:@selector(contact:)];;
En Swift 2, harías:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
(No es un cambio importante) En Swift 4/5, será:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItem.Style.done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
¿Por qué no usar lo siguiente? (Del botón Dibujar Atrás personalizado en la barra de navegación del iPhone )
// Add left
UINavigationItem *previousItem = [[UINavigationItem alloc] initWithTitle:@"Back title"];
UINavigationItem *currentItem = [[UINavigationItem alloc] initWithTitle:@"Main Title"];
[self.navigationController.navigationBar setItems:[NSArray arrayWithObjects:previousItem, currentItem, nil] animated:YES];
// set the delegate to self
[self.navigationController.navigationBar setDelegate:self];
rápido 3
let cancelBarButton = UIBarButtonItem(title: "Cancel", style: .done, target: self, action: #selector(cancelPressed(_:)))
cancelBarButton.setTitleTextAttributes( [NSFontAttributeName : UIFont.cancelBarButtonFont(),
NSForegroundColorAttributeName : UIColor.white], for: .normal)
self.navigationItem.leftBarButtonItem = cancelBarButton
func cancelPressed(_ sender: UIBarButtonItem ) {
self.dismiss(animated: true, completion: nil)
}