2010-09-27 7 views
1

Je sais que cela peut sembler étrange, mais j'ai besoin d'ajouter un bouton de retour sur la barre de navigation de la vue du premier navigateur navigationController. J'ai essayé comme ceci:Bouton Précédent sur UINavigationController

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Foo" style:UIBarButtonItemStyleBordered target:self               action:@selector(foo:)]; 
self.navigationItem.backBarButtonItem=backButton; 

si au lieu de backBarButtonItem j'écris leftBarButtonItem le bouton est montré. Mon problème est que j'ai besoin d'un bouton fléché comme le bouton normal de retour. Est-ce possible?

Répondre

0

Je ne pense pas que vous pouvez le faire sur la première vue NavigationController, parce que vous devez définir la propriété backBarButtonItem dans le contrôleur parent , avant que le contrôleur de l'enfant est poussé. En outre, selon le Apple docs, l'action & cible du backBarButtonItem doit être nil.

Cette question à propos de creating a left-arrow button on a UIToolbar peut vous donner quelques idées sur la façon dont vous pouvez contourner ce problème en utilisant une image personnalisée (pour le LeftBarButtonItem).

0

Bien sûr, vous pouvez le faire. Vous avez juste besoin de changer le titre de leftBarButtonItem en retour alors vous obtiendrez une belle flèche gauche avec le titre de retour. Ensuite, il vous suffit de changer le sélecteur pour réellement effectuer une méthode lorsque le bouton est cliqué. Alors @selector(foo:)

Voici un code sur la façon de réaliser ce qui précède:

self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleDone; 
self.navigationItem.leftBarButtonItem.title = @"Back"; 
self.navigationItem.leftBarButtonItem.target = self; 
self.navigationItem.leftBarButtonItem.action = @selector(endTextEnteringButtonAction:); 

Laissez-moi savoir si cela aide.

+0

J'ai essayé comme tu as écrit mais rien n'apparaît. Dois-je définir un bouton de barre de texte avant d'utiliser votre code? – PiccoloBuddha

+0

ya moi aussi essayé, mais ne fonctionne pas – ArunGJ

+0

gars dont vous avez besoin pour vous assurer que vous définissez le délégué dans la méthode de chargement et assurez-vous que le bouton est instancié dans la même méthode dans ce cas le leftBarButtonItem, alors vous pouvez commencer à faire des choses comme ce que ive écrit dans la réponse – Pavan

1

Habituellement, cela fonctionne hors de la boîte, mais parfois avec des vues modales/feuilles d'action que vous pouvez avoir besoin,. Juste avant instancier votre viewcontroller et poussez sur pile NavigationController, essayez

UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle: @"Back" style: UIBarButtonItemStyleBordered target: nil action: nil]; 
    [[self navigationItem] setBackBarButtonItem: newBackButton]; 
    [newBackButton release]; 

    DetailViewController *detailVC = [[DetailViewController alloc]init]; 
    [self.navigationController pushViewController:detailVC animated:YES]; 
    [detailVC release]; 
0

d'Apple document dit:

Lorsque cet élément de navigation est immédiatement sous l'élément supérieur de la pile, le contrôleur de navigation calcule les bouton de retour pour la barre de navigation à partir de cet élément de navigation. Donc, si votre élément de navigation est en haut de la pile (comme nous le disons ici), vous ne pouvez pas ajouter le bouton retour au contrôleur de navigation, simplement parce qu'il n'y a pas d'endroit où retourner, parce que c'est le premier élément dans la pile.

Mise à jour Réponse: Après avoir cherché je trouvé du travail un tour pour faire un bouton de retour dans votre contrôleur de vue racine dans le contrôleur de navigation dans ces link

Il est très simple :)

[self.navigationItem setHidesBackButton:YES animated:YES]; 
UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Start" style:UIBarButtonItemStyleBordered target:self action:@selector(initializeStuff)]; 

self.navigationItem.leftBarButtonItem = backButton; 
Questions connexes