web-dev-qa-db-fra.com

Comment ajouter un bouton à UINavigationBar?

Comment ajouter un bouton à UINavigationBar par programme?

115
RexOnRoids

Exemple de code pour définir le rightbutton sur 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];

Mais normalement, vous auriez un NavigationController, vous permettant d'écrire:

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

Les réponses ci-dessus sont bonnes, mais j'aimerais les préciser avec quelques autres conseils:

Si vous souhaitez modifier le titre du bouton de retour (la flèche en forme de flèche située à gauche de la barre de navigation), vous DEVEZ le faire dans le contrôleur de vue PRÉCÉDENT, et non celui pour lequel il s'affichera. C'est comme si on disait "hé, si jamais vous placez un autre contrôleur de vue au-dessus de celui-ci, appelez le bouton Retour" Retour "(ou autre chose) au lieu du bouton par défaut."

Si vous souhaitez masquer le bouton Précédent pendant un état spécial, par exemple lorsqu'un UIPickerView est affiché, utilisez self.navigationItem.hidesBackButton = YES; et rappelez-vous de le rétablir lorsque vous quittez l'état spécial.

Si vous souhaitez afficher l'un des boutons symboliques spéciaux, utilisez le formulaire initWithBarButtonSystemItem:target:action avec une valeur comme UIBarButtonSystemItemAdd

N'oubliez pas que la signification de ce symbole dépend de vous, mais faites attention aux directives d'interface utilisateur. L'utilisation de UIBarButtonSystemItemAdd pour signifier la suppression d'un élément entraînera probablement le rejet de votre application.

20
Amagrammer

Ajout d’un bouton personnalisé à la barre de navigation (avec une image pour buttonItem et spécifiant la méthode d’action (void) openView {} et).

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];
11
Oleh Kudinov

L'exemple ci-dessous affiche un bouton portant le titre "Contact" dans la barre de navigation de droite. Son action appelle une méthode appelée "contact" à partir du viewcontroller. Sans cette ligne, le bouton droit n'est pas visible.

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

enter image description here

7
Tibidabo

Dans Swift 2, vous feriez:

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

(Pas un changement majeur) Dans Swift 4/5, ce sera:

let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItem.Style.done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
3
NRR

Pourquoi ne pas utiliser les éléments suivants: (de bouton Dessiner personnalisé dans la barre de navigation de l'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];
2
Joe

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)
    }
0
venky