Comment ajouter un bouton à UINavigationBar par programme?
Comment ajouter un bouton à UINavigationBar par programme?
Réponses:
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;
[rightbutton release]
sous ARC (qui n'existait pas au moment où ce commentaire a été écrit à l'origine).
Les réponses ci-dessus sont bonnes, mais j'aimerais les étoffer avec quelques conseils supplémentaires:
Si vous souhaitez modifier le titre du bouton de retour (la flèche-y regardant celle à 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 dire "hé, si jamais vous poussez un autre contrôleur de vue par-dessus celui-ci, appelez le bouton de retour" Retour "(ou autre chose) au lieu de la valeur par défaut."
Si vous souhaitez masquer le bouton de retour pendant un état spécial, par exemple lorsqu'un UIPickerView est affiché, utilisez self.navigationItem.hidesBackButton = YES;
et n'oubliez pas de le réinitialiser 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 telle queUIBarButtonSystemItemAdd
N'oubliez pas que la signification de ce symbole dépend de vous, mais faites attention aux directives de l'interface humaine. L'utilisation de UIBarButtonSystemItemAdd pour signifier la suppression d'un élément entraînera probablement le rejet de votre demande.
Ajout d'un bouton personnalisé à la barre de navigation (avec image pour buttonItem et spécification de 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];
L'exemple ci-dessous affichera un bouton avec un titre "Contact" dans la barre de navigation à droite. Son action appelle une méthode nommée "contact" depuis le 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:)];;
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
Pourquoi ne pas utiliser ce qui suit: (à partir du bouton Dessiner le 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];
rapide 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)
}