Cómo agregar un botón a UINavigationBar mediante programación?

InformationsquelleAutor RexOnRoids | 2010-03-23

7 Comentarios

  1. 294

    Código de ejemplo 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 un NavigationController, permitiéndole escribir:

    UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
        style:UIBarButtonItemStyleDone target:nil action:nil];
    self.navigationItem.rightBarButtonItem = rightButton;
    • Me sale un aviso en el estilo: parámetro -> advertencia: la Cuestión Semánticas: la conversión Implícita del tipo de enumeración ‘UIBarButtonSystemItem’ a diferentes tipo de enumeración ‘UIBarButtonItemStyle’
    • Este debe ser initWithBarButtonSystemItem:UIBarButtonSystemItemDone para evitar la advertencia.
    • En el ejemplo, no entiendo donde «bar» está viniendo. ¿Cuál es el valor predeterminado de la barra superior de la propiedad para un UINavigationItem ?
    • El bar de la variable en la respuesta es cualquier barra de navegación que no es gestionado por un controlador de navegación. Si usted tiene un controlador de navegación, tiene una barra de navegación de su propio que se maneja, en este caso, cada controlador de vista que empujar a la navegación controlador debe configurar su propio elemento de navegación (que incluye la configuración de la rightBarButtonItem en su propio navigationItem de la propiedad).
    • Para los lectores actuales, no creo que haya ninguna razón para llamar a [rightbutton release] bajo el ARCO (que no estaba presente en el momento en que este comentario fue escrito originalmente).
    • eso es correcto. La respuesta fue escrito antes de la ARC. He actualizado la respuesta y se eliminan de la liberación de las líneas de
    • en realidad, usted no puede llamar a la liberación bajo el ARCO. Así que, sí, pero aún más 😉

  2. 20

    Las respuestas anteriores son buenas, pero me gustaría carne con un par de consejos más:

    Si quieres modificar el título del botón atrás (la flecha-y mirando a la izquierda de la barra de navegación) DEBE hacerlo en el ANTERIOR controlador de vista, no de la que se mostrará. Es como decir «oye, si alguna vez empujar a otro controlador de vista en la parte superior de esta, llamada la parte de atrás del botón «Atrás» (o lo que sea) en lugar de la predeterminada.»

    Si quieres ocultar el botón atrás durante un estado especial, como un UIPickerView se muestra, utilice self.navigationItem.hidesBackButton = YES; y recordar a volver cuando salga el especial del estado.

    Si quieres mostrar uno de los símbolos de los botones, utilice el formulario de initWithBarButtonSystemItem:target:action con un valor como UIBarButtonSystemItemAdd

    Recuerde, el significado de ese símbolo es para usted, pero tenga cuidado de los Humanos, las Directrices de Interfaz. El uso de UIBarButtonSystemItemAdd significa la eliminación de un elemento probable que obtener su solicitud rechazada.

  3. 11

    La adición de botón personalizado a la barra de navegación ( con imagen para buttonItem y especificar 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];
  4. 7

    El siguiente ejemplo mostrará un botón con el título de «Contacto» en la barra de navegación a la derecha. Su acción llama a un método llamado «contacto» de la viewcontroller. Sin esta línea el botón de la derecha no es visible.

        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Contact"
                                                                              style:UIBarButtonItemStylePlain target:self action:@selector(contact:)];;

    Cómo agregar un botón a UINavigationBar?

  5. 3

    En Swift 2, usted haría:

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

    ¿Por qué no utilizar lo siguiente:
    (de Dibujar personalizado botón Atrás de la Barra de Navegación en el 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];
  7. 0

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

Dejar respuesta

Please enter your comment!
Please enter your name here