web-dev-qa-db-fra.com

Ajout d'un UIBarButtonItem par programme à UINavigationBar

J'ai laissé tomber un UINavigationBar dans UIInterfaceBuilder. Je présente cette vue de manière modale et je veux juste qu'un UIBackBarButton revienne à ma dernière vue. J'ai une sortie et une propriété à ce UINavigationBar déclarées. J'ai pensé que dans ma méthode viewDidLoad, je pourrais créer un UIBackButton comme ceci:

UIBarButtonItem *backButton = 
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonItemStyleBordered 
                                              target:self 
                                              action:@selector(goBack)];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];

Mais je ne vois pas mon UIBackBarButtonItem sur le UINavigationBar. Je pense que je fais quelque chose de mal ici car je ne pense pas que mon UINavigationBar sache que j'essaye d'y ajouter ce UIBackBarButtonItem de cette manière. Dois-je créer un NSArray, y mettre le bouton et définir à la place des éléments pour la barre de navigation?

Je ne comprends pas comment la propriété navigationItem fonctionne par rapport aux setItems de UINavigationBar également. Toute aide serait appréciée. Merci!

19
Crystal

Vous essayez de définir l'élément de bouton de retour dans une vue modale qui n'ajoute pas de backBarButtonItem. C'est ce qui empêche le Button (ou tout autre bouton de retour) de ne pas s'afficher. Le backBarButtonItem est principalement destiné à être utilisé avec les contrôleurs Pushed View qui ont un bouton Retour ajouté à partir du parent (élément suivant ci-dessous) lorsque vous appuyez sur un nouveau contrôleur de vue (élément supérieur). Le Apple UINavigationItem Documentation dit:

Lorsque cet élément est l'élément arrière de la barre de navigation - lorsqu'il s'agit de l'élément suivant sous l'élément supérieur - il peut être représenté sous la forme d'un bouton Précédent dans la barre de navigation. Utilisez cette propriété pour spécifier le bouton de retour. La cible et l'action de l'élément de bouton de la barre arrière que vous définissez doivent être nulles. La valeur par défaut est un élément de bouton de barre affichant le titre de l'élément de navigation.

Pour obtenir le bouton Retour sur le côté gauche comme vous le souhaitez, essayez de changer

self.navigationItem.backBarButtonItem = backButton;

à

self.navigationItem.leftBarButtonItem = backButton;
16
Suhail Patel

faire un appel comme celui-ci à partir d'un contrôleur de vue

{
    NextViewController* vcRootView = [[NextViewController alloc] initWithNibName:@"NextView" bundle:[NSBundle mainBundle]];
    UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:vcRootView];
    [vcRootView release];

    [self.navigationController presentModalViewController:navController animated:YES];
    [navController release];    

}

présentera NextViewController comme une vue modale sur la vue appelante et NextViewController aura un navigationController pour cela.

Dans le fichier d'implémentation NextViewController, tout ce dont vous avez besoin est ceci

- (void)viewDidLoad {
    [super viewDidLoad];

    UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self 
                                                                  action:@selector(barButtonBackPressed:)];
    self.navigationItem.leftBarButtonItem = backButton;
    [backButton release];
}


-(void)barButtonBackPressed:(id)sender{
    [self dismissModalViewControllerAnimated:YES];
}

pour avoir le bouton retour pour fermer la vue modale. J'espère que ça aide.

12
Rahul Sharma

Utilisez l'extrait de code ci-dessous:

//Add button to NavigationController
UIBarButtonItem *backButton = 
 [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@“back”, @"")
                                  style:UIBarButtonItemStylePlain 
                                 target:self 
                                 action:@selector(goBack)];

self.navigationItem.leftBarButtonItem = backButton;

//Perform action on back Button
- (void) goBack {    // Go back task over-here
}

Les différents types de styles disponibles sont:

UIBarButtonItemStylePlain, UIBarButtonItemStyleBordered, UIBarButtonItemStyleDone
8
Jayprakash Dubey

Vous pouvez utiliser ces setters sans créer de nouveau UIBarButtonItem:

[self.navigationItem.leftBarButtonItem setAction:@selector(doBackButton:)];
[self.navigationItem.leftBarButtonItem setTarget:self];
3
Sergey Nikitin