web-dev-qa-db-fra.com

Comment masquer le bouton "retour" dans UINavigationController?

Savez-vous comment cacher le bouton 'retour' dans un UINavigationController? Aussi, comment le montrer, mais je suppose que c'est très similaire à le cacher ...

Tout comme l'application de messagerie sur l'iPhone lorsque vous cliquez sur "Modifier" lorsque vous consultez des e-mails.

156
Zoran Simic

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];

-

[UPDATE]

Swift 3.0:

self.navigationItem.setHidesBackButton(true, animated:true)
307
Zoran Simic

Ajouter ce code

[self.navigationItem setHidesBackButton:YES];
27
user2223924

En plus de supprimer le bouton de retour (en utilisant les méthodes déjà recommandées), n'oubliez pas que l'utilisateur peut toujours "passer" à l'écran précédent en effectuant un mouvement 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;
22
mattv123

Juste pour clarifier les réponses existantes: la propriété hidesBackButton est la bonne réponse, mais il n’est pas clair dans de nombreuses réponses à quoi self fait référence. Fondamentalement, vous devriez définir self.navigationItem.hidesBackButton = YES dans le contrôleur de vue sur le point d'être poussé (ou juste poussé) sur le UINavigationController.

En d'autres termes, disons que j'ai un UINavigationController nommé myNavController. Je veux mettre une nouvelle vue dessus, et quand je le fais je ne veux plus que le bouton Précédent apparaisse. 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 est terminé, la vue contrôlée par newVC devrait maintenant être affichée et aucun bouton de retour ne devrait être visible.

17
Matt

Pour masquer et afficher le bouton Précédent de manière conditionnelle, 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 l'insérer dans la méthode viewDidAppear au lieu de viewWillAppear, comme dans les cas suivants: lorsque vous mettez à jour le tableau de la classe suivante dans la classe précédente, puis que vous vérifiez la condition dans la classe suivante, comme ci-dessus.

16
Sandip Patel - SM

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
11
Vinod Joshi

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

J'ai utilisé de cette façon ->

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

Toujours utiliser Apple Documentation pour les problèmes simples, ils sont plus simples et plus légers :)

Voici la syntaxe pour 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:

7
Muhammed Irfan

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

  • à l'intérieur de viewDidLoad/viewWillAppear, seule l'icône de retour était masquée et la chaîne "Back" était inactive mais restait visible
  • viewDidAppear le bouton de retour a disparu ... mais je ne voulais pas que l'utilisateur le voie du tout

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;
}
6
micromanc3r

La solution suggérée par Zoran Simic n'a pas fonctionné pour moi pour une raison quelconque.

Ce code a cependant fonctionné:

MyController* controller   =   [[MyController alloc]  init];
NSArray* array             =   [[[NSArray alloc] initWithObjects:controller, nil] autorelease];

[self.navigationController setViewControllers:array animated:NO];

[controller release];

Évidemment, vous devrez manipuler un NSArray à votre goût pour le faire fonctionner pour vous. J'espère que ça aide quelqu'un :)

3
PowerAktar

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];
}
1
neoneye

Cela masque le bouton de retour et le remplace par un bouton d’ajout 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
        }
    }
}
0
David Weiss

Cela cache le bouton de retour

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


navigationItem.leftBarButtonItem = backBtn
0
Zeeshan

Rapide 3.

En règle générale, vous devez utiliser l'API per-ViewController d'Apple comme décrit à plusieurs reprises déjà sur cette page, mais vous devez parfois contrôler immédiatement le bouton Précédent.

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

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