Comment masquer le bouton “retour” dans UINavigationController?

Savez-vous comment masquer le bouton ‘back’ dans un UINavigationController? Aussi, comment le montrer, mais je suppose que c’est très similaire à le cacher …

Tout comme l’application de messagerie le fait sur l’iPhone lorsque vous appuyez sur «Modifier» lors de l’affichage des e-mails.

Je viens de découvrir la réponse, dans un contrôleur, utilisez ceci:

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

Et pour le restaurer:

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

[METTRE À JOUR]

Swift 3.0:

 self.navigationItem.setHidesBackButton(true, animated:true) 

Ajouter ce code

 [self.navigationItem setHidesBackButton:YES]; 

En plus de supprimer le bouton Précédent (en utilisant les méthodes déjà recommandées), n’oubliez pas que l’utilisateur peut toujours accéder à l’écran précédent avec un geste de balayage de gauche à droite dans iOS 7 et versions ultérieures.

Pour désactiver cela (le cas échéant), implémentez les éléments suivants (dans viewDidLoad par exemple):

  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) self.navigationController.interactivePopGestureRecognizer.enabled = NO; 

Pour masquer et afficher le bouton Retour sous condition, vous pouvez utiliser le code suivant:

 -(void)viewDidAppear:(BOOL)animated { if ([tempAry count]==0) { [self.navigationItem setHidesBackButton:YES animated:YES]; } else { [self.navigationItem setHidesBackButton:NO animated:YES]; } [super viewDidAppear:animated]; } 

Remarque: dans certains cas, vous devez le placer dans la méthode viewDidAppear au lieu de viewWillAppear, par exemple: lorsque vous mettez à jour le tableau de la classe suivante dans la classe précédente et que vous contrôlez la condition dans la classe suivante comme ci-dessus.

Juste pour clarifier les réponses existantes: la propriété hidesBackButton est la bonne réponse, mais ce n’est pas clair dans beaucoup de réponses à quoi se réfère le self . Fondamentalement, vous devez définir self.navigationItem.hidesBackButton = YES dans le contrôleur de vue qui est sur le point d’être propulsé (ou simplement poussé) sur UINavigationController .

En d’autres termes, disons que j’ai un UINavigationController nommé myNavController . Je veux y append une nouvelle vue et quand je le ferai, je ne veux plus que le bouton de retour s’affiche. Je pourrais faire quelque chose comme:

 UIViewController *newVC = [[UIViewController alloc] init]; //presumably would do some stuff here to set up the new view controller newVC.navigationItem.hidesBackButton = YES; [myNavController pushViewController:newVC animated:YES]; 

Lorsque le code se termine, la vue contrôlée par newVC devrait maintenant apparaître, et aucun bouton de retour ne devrait être visible.

Swift iOS (j’ai utilisé suivant)

 // hide back button self.navigationItem.setHidesBackButton(true, animated: false) // pgrm mark ----- ------ // hide the back button for this view controller override func setEditing(editing: Bool, animated: Bool) { super.setEditing(editing, animated: animated) self.navigationItem.setHidesBackButton(editing, animated: animated) }// end setEditing 

sethidesbackbutton n’a pas fonctionné pour moi pour une raison quelconque

J’ai utilisé cette façon ->

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

Utilisez toujours la documentation Apple pour les problèmes simples, simples et légers 🙂

Voici la syntaxe de Swift 3.0:

 self.navigationItem.setHidesBackButton(true, animated:true) 

Référence

https://developer.apple.com/reference/uikit/uinavigationitem#//apple_ref/occ/instm/UINavigationItem/setHidesBackButton:animated:

Dans mon cas, j’ai eu peu de problèmes avec les réponses actuelles:

  • inside viewDidLoad / viewWillAppear Seule l’icône de retour était masquée et la chaîne “Back” était inactive mais toujours visible
  • à l’intérieur de viewDidAppear le bouton arrière a disparu … mais je ne voulais pas que l’utilisateur le voit du tout

Donc, la solution qui a finalement fonctionné pour moi est la suivante:

 - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { [self.navigationItem setHidesBackButton:YES animated:NO]; } return self; } 

La solution suggérée par Zoran Simic ne fonctionnait pas pour moi pour une raison quelconque.

Ce code a fonctionné cependant:

 MyController* controller = [[MyController alloc] init]; NSArray* array = [[[NSArray alloc] initWithObjects:controller, nil] autorelease]; [self.navigationController setViewControllers:array animated:NO]; [controller release]; 

De toute évidence, vous devrez manipuler un NSArray à votre goût pour le faire fonctionner pour vous. J’espère que ça aide quelqu’un 🙂

Dans ma sous-classe UIViewController, j’ai cette méthode:

 -(void)setEditing:(BOOL)editing animated:(BOOL)animated { [super setEditing:editing animated: animated]; // hide back button in edit mode [self.navigationItem setHidesBackButton:editing animated:YES]; } 

Cela masque le bouton de retour et le remplace par un bouton Ajouter dans Swift:

 override func setEditing(_ editing: Bool, animated: Bool) { super.setEditing(editing, animated: animated) // This hides the back button while in editing mode, which makes room for an add item button self.navigationItem.setHidesBackButton(editing, animated: animated) if editing { // This adds the add item button let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped)) // Use the animated setter for the left button so that add button fades in while the back button fades out self.navigationItem.setLeftBarButton(addButton, animated: animated) self.enableBackGesture(enabled: false) } else { // This removes the add item button self.navigationItem.setLeftBarButton(nil, animated: animated) self.enableBackGesture(enabled: true) } } func enableBackGesture(enabled: Bool) { // In addition to removing the back button and adding the add item button while in edit mode, the user can still exit to the previous screen with a left-to-right swipe gesture in iOS 7 and later. This code disables this action while in edit mode. if let navigationController = self.navigationController { if let interactivePopGestureRecognizer = navigationController.interactivePopGestureRecognizer { interactivePopGestureRecognizer.isEnabled = enabled } } } 

Swift 3.

En règle générale, vous devez utiliser l’API per-ViewController d’Apple, comme décrit plusieurs fois sur cette page, mais vous avez parfois besoin d’un contrôle immédiat du bouton Précédent.

Le code suivant masque le bouton Précédent et garantit que la détection de collision ne se produit pas dans la zone du bouton masqué.

 let emptyView = UIView(frame: .zero) self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: emptyView) 

Cela cache le bouton arrière

 let backBtn = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: navigationController, action: nil) navigationItem.leftBarButtonItem = backBtn