Comment masquer le bouton «Retour» sur la barre de navigation sur iPhone?


315

J'ai ajouté un contrôle de navigation pour basculer entre les vues dans mon application. Mais certaines vues ne devraient pas avoir de bouton «Retour» (le titre précédent). Des idées sur la façon de masquer le bouton de retour?

Réponses:


812

Objectif c:
self.navigationItem.hidesBackButton = YES;

Rapide:
navigationItem.hidesBackButton = true


@ user8170 comment masquer le bouton gauche de la barre de navigation ..?
rockey

9
vous ne pouvez pas cacher le bouton arrière self.navigationItem.leftBarButtonItem = nil;. Si vous avez défini explicitement leftbarbuttonitem, vous pouvez l'utiliser self.navigationItem.leftBarButtonItem = nil;. self.navigationItem.hidesBackButton = YES;
masquera le

1
Dans iOS 7, self.navigationItem.leftBarButtonItem = nil; n'affecte pas le bouton de retour lorsqu'il est émis à partir de viewDidLoad, viewWillAppear ou viewDidAppear. Cette ligne de code fonctionne dans le viewdidLoad: self.navigationItem.hidesBackButton = YES;
Alex Zavatone

2
Je ne sais pas si cela aide, mais 'self' est toujours un contrôleur de vue qui est présenté sur le dessus de la pile du contrôleur de navigation.
Kunal Balani

self.navigationItem.hidesBackButton = YES; fonctionne pour moi dans viewDidLoad, ios 7
leukosaima

38

La meilleure façon est de les combiner, donc cela masquera le bouton retour même si vous le configurez manuellement:

self.navigationItem.leftBarButtonItem=nil;
self.navigationItem.hidesBackButton=YES;

6
Pour répondre à user716216, il l'a expliqué dans son explication d'une phrase. La deuxième ligne de code est celle qui fonctionne pour le cas par défaut. La première ligne de code fonctionne si vous avez créé et ajouté le bouton vous-même.
Alex Zavatone

21

cacher le bouton de retour avec le code ci-dessous ...

[self.navigationItem setHidesBackButton:YES animated:YES];

ou

[self.navigationItem setHidesBackButton:YES];

Aussi, si vous avez personnalisé, UINavigationBaressayez le code ci-dessous

self.navigationItem.leftBarButtonItem = nil;

dans n'importe quelle classe lorsque vous avez utilisé ce code, le bouton de retour de la barre de navigation de cette classe se cachera ...
Paras Joshi

6

Dans Swift :

Ajoutez ceci au contrôleur

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.setHidesBackButton(true, animated: false)
}


3

Dans la fonction viewDidLoad de l'UIViewController, utilisez le code:

self.navigationItem.hidesBackButton = YES;

2

N'oubliez pas que vous devez l'appeler sur l'objet qui a le contrôleur de navigation. Par exemple, si vous avez un contrôleur nav poussant sur un contrôleur de barre d'onglets avec un RootViewController, appeler self.navigationItem.hidesBackButton = YESle RootViewController ne fera rien. Il faudrait en fait appelerself.tabBarController.navigationItem.hidesBackButton = YES


2

N'oubliez pas que nous avons maintenant le geste de glisser vers l'arrière. Vous souhaiterez probablement supprimer cela également. N'oubliez pas de le réactiver si nécessaire.

if ([self.navigationItem respondsToSelector:@selector(hidesBackButton)]) {
    self.navigationItem.hidesBackButton = YES;
}

if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}

1

Ajoutez ce code dans votre contrôleur de vue

UIView *myView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 300, 30)];
UIBarButtonItem *btnL = [[UIBarButtonItem alloc]initWithCustomView:myView];
self.navigationItem.leftBarButtonItem = btnL;

1

Pour moi, rien de ce qui précède ne semblait fonctionner, cela n'avait aucun effet visuel. J'utilise des storyboards avec une vue qui est "intégrée" dans un contrôleur de navigation.

Ensuite, au niveau du code, j'ajoute mes éléments menuItems et pour une raison quelconque, le "backButton" est visible lors du débogage visuel de la hiérarchie des vues, et mon icône menuItem s'affiche sous le "bouton retour" invisible.

J'ai essayé les réglages, comme suggéré dans les différentes méthodes de crochet et cela n'a eu aucun effet. Ensuite, j'ai essayé une approche plus brutale et j'ai réitéré la sous-vue, qui n'a également eu aucun effet.

J'ai inspecté la taille de mes icônes et j'ai semblé aller bien. Après avoir fait référence à la Apple Human Interface Guideline, j'ai confirmé que mes icônes étaient correctes. (1 pixel plus petit dans mon cas 24px 48px 72px).

La partie la plus étrange est alors la solution réelle ...

Lorsque vous ajoutez l'élément BarButton, donnez-lui un titre avec au moins un caractère , dans mon cas, un caractère espace.

Espère que cela aide quelqu'un.

//left menu - the title must have a space
UIBarButtonItem *leftButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " <--THE FIX 
                                                                    style:UIBarButtonItemStylePlain
                                                                  target:self
                                                                  action:@selector(showMenu)];
leftButtonItem.image = [UIImage imageNamed:@"ic_menu"];

[self.navigationItem setLeftBarButtonItem:leftButtonItem];

1

Ça ne marchait pas pour moi dans tous les cas quand je mets

self.navigationItem.hidesBackButton = YES;

dans viewWillAppear ou ViewDidLoad, mais a parfaitement fonctionné lorsque je l'ai défini à l'init de viewController.


0

essaye celui-là - self.navigationController?.navigationItem.hidesBackButton = true



0
navigationItem.leftBarButtonItem = nil
navigationItem.hidesBackButton = true

si vous utilisez ce bloc de code dans didLoad ou loadView a fonctionné mais n'a pas fonctionné parfaitement. Si vous regardez attentivement, vous pouvez voir que le bouton de retour se cache lorsque votre vue se charge.

Quelle est la solution parfaite?

Ajoutez le composant BarButtonItem de componentView (Commande + Maj + L) à votre barre de navigation viewControllers cible.

Sélectionnez BarButtonItem set Title = "" dans le panneau de droite

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.