116 votes

Comment ajouter un bouton à UINavigationBar ?

Comment ajouter un bouton à UINavigationBar de manière programmatique ?

293voto

Mads Mobæk Points 9515

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 devriez avoir un NavigationController pour vous permettre d'écrire :

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

1 votes

J'obtiens un avertissement sur le style : paramètre -> avertissement : Problème sémantique : Conversion implicite du type d'énumération "UIBarButtonSystemItem" en un autre type d'énumération "UIBarButtonItemStyle".

3 votes

Il devrait être initWithBarButtonSystemItem:UIBarButtonSystemItemDone pour éviter l'avertissement.

2 votes

Dans l'exemple, je ne comprends pas d'où vient "bar". Quelle est la propriété par défaut de la barre supérieure d'un UINavigationItem ?

20voto

Amagrammer Points 5064

Les réponses ci-dessus sont bonnes, mais j'aimerais les étoffer avec quelques conseils supplémentaires :

Si vous voulez modifier le titre du bouton de retour (celui qui ressemble à une flèche à gauche de la barre de navigation), vous DEVEZ le faire dans le contrôleur de vue PRÉCÉDENT, et non dans celui pour lequel il s'affichera. C'est comme si vous disiez "Hé, si jamais vous ajoutez un autre contrôleur de vue à celui-ci, appelez le bouton de retour "Back" (ou autre) au lieu du titre par défaut".

Si vous souhaitez masquer le bouton retour pendant un état particulier, par exemple lorsqu'une UIPickerView est affichée, utilisez la fonction self.navigationItem.hidesBackButton = YES; et n'oubliez pas de le remettre en place lorsque vous quittez l'état spécial.

Si vous voulez afficher l'un des boutons symboliques spéciaux, utilisez la forme initWithBarButtonSystemItem:target:action avec une valeur comme UIBarButtonSystemItemAdd

N'oubliez pas que la signification de ce symbole vous appartient, mais faites attention aux directives relatives à l'interface humaine. Si vous utilisez UIBarButtonSystemItemAdd pour signifier la suppression d'un élément, votre demande sera probablement rejetée.

11voto

Oleh Kudinov Points 731

Ajout d'un bouton personnalisé à la barre de navigation ( avec une image pour buttonItem et en 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];

7voto

Tibidabo Points 10510

L'exemple ci-dessous affiche un bouton avec un titre "Contact" sur la barre de navigation à droite. Son action appelle une méthode nommée "contact" depuis le viewcontroller. Sans cette ligne, le bouton de droite n'est pas visible.

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

enter image description here

2voto

Joe Points 123

Pourquoi ne pas utiliser ce qui suit : (de Dessiner un bouton Retour personnalisé sur 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];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X