2010-03-23 10 views

Respuesta

289

Código de muestra para establecer el rightbutton en un 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 una NavigationController, lo que le permite escribir:

UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
    style:UIBarButtonItemStyleDone target:nil action:nil]; 
self.navigationItem.rightBarButtonItem = rightButton; 
+1

recibo una advertencia sobre el estilo: parámetro -> Advertencia: cuestión semántica: la conversión implícita del tipo de enumeración 'UIBarButtonSystemItem' a diferente tipo de enumeración 'UIBarButtonItemStyle' – pojo

+3

Esto debería ser initWithBarButtonSystemItem: UIBarButtonSystemItemDone para evitar la advertencia. – JordanC

+2

En el ejemplo, no entiendo de dónde viene la "barra". ¿Cuál es la propiedad de barra superior predeterminada para un UINavigationItem? – aneuryzm

20

Las respuestas anteriores son buenas, pero me gustaría dar cuerpo a cabo con algunos consejos más:

Si desea modificar el título del botón Atrás (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 Atrás" (Atrás) (o lo que sea) en lugar del predeterminado ".

Si desea ocultar el botón Atrás durante un estado especial, como cuando se muestra un UIPickerView, utilice self.navigationItem.hidesBackButton = YES; y recuerde configurarlo cuando abandone el estado especial.

Si desea mostrar uno de los botones simbólicas especiales, utilice el formulario initWithBarButtonSystemItem:target:action con un valor como UIBarButtonSystemItemAdd

Recuerde, el significado de ese símbolo depende de usted, pero tenga cuidado de las Directrices de interfaz humana. Usar UIBarButtonSystemItemAdd para significar eliminar un elemento probablemente hará que su aplicación sea rechazada.

11

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 {} and).

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]; 
7

El siguiente ejemplo mostrará un botón con el título "Contacto" en la barra de navegación a la derecha. Su acción llama a un método llamado "contacto" del viewcontroller. 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:)];; 

enter image description here

2

Por qué no usar lo siguiente: (de Draw custom Back button on iPhone Navigation Bar)

// 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]; 
3

En Swift 2, que haría:

let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: nil) 
self.navigationItem.rightBarButtonItem = rightButton 
0

rápida 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) 
    } 
Cuestiones relacionadas