bar iphone xcode interface-builder uinavigationbar

iphone - ¿Cómo agregar un botón a UINavigationBar?



navigation bar ios (7)

¿Cómo agregar un botón a UINavigationBar programmatically?


Agregar un botón personalizado a la barra de navegación (con imagen para buttonItem y método de acción específico (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 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:)];;


En Swift 2, harías:

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


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

Si desea modificar el título del botón Atrás (la flecha-y buscando uno 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, use self.navigationItem.hidesBackButton = YES; y recuerde configurarlo cuando abandone el estado especial.

Si desea mostrar uno de los botones simbólicos especiales, use la forma initWithBarButtonSystemItem:target:action con un valor como UIBarButtonSystemItemAdd

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


Por qué no usar lo siguiente: (desde el botón Atrás personalizado Draw 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];


veloz 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) }


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

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