Swift - Comment masquer le bouton de retour dans l'élément de navigation?

103

À l'heure actuelle, j'ai deux contrôleurs de vue. Mon problème est que je ne sais pas comment masquer le bouton de retour après la transition vers le deuxième contrôleur de vue. La plupart des références que j'ai trouvées sont en Objective-C. Comment le coder dans Swift?

Masquer le code du bouton retour dans Objective-C

[self.navigationItem setHidesBackButton:YES animated:YES];
Mohammad Nurdin
la source

Réponses:

366

Selon la documentation pour UINavigationItem:

self.navigationItem.setHidesBackButton(true, animated: true);
Paulw11
la source
30
le sarcasme est gratuit.
Greg du
58
Cela pourrait vous effrayer @ Paulw11, mais le fait est de taper "Swift hide back button" dans Google et de venir ici - comme je viens de le faire - est beaucoup plus rapide que de parcourir les rames de texte de la documentation officielle.
Joseph Beuys 'Mum
4
Alors que le nom du bouton de retour est défini dans le premier contrôleur de vue, il peut être intéressant de noter que le code pour le masquer doit être implémenté dans le deuxième contrôleur de vue (celui affichant le bouton).
XLE_22
38

Si vous utilisez un UITabBarController:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.tabBarController?.navigationItem.hidesBackButton = true
}
Bruno Cunha
la source
Pareil pour moi, mais j'aimerais comprendre pourquoi. Quelqu'un sait-il quelle est la différence entre la réponse acceptée et cette approche? La seule chose à laquelle je peux penser est le modèle d'héritage par rapport à une version statique de la barre de navigation.
Helmut Granda
1
@HelmutGranda Si vous remarquez que Bruno utilise un contrôleur de barre d'onglets, c'est la différence. Dans le cas des réponses acceptées, le VC est probablement intégré dans un contrôleur de navigation.
cloudcal
@cloudcal Je n'utilise pas de tabBar, mais les deux réponses ont fonctionné. Tous deux ont caché le bouton de retour. Je pensais qu'ils se comporteraient différemment si le viewController était à l'écran , puis je voulais masquer le bouton de retour. Encore une fois, ils ont tous deux agi de la même manière. Je n'ai pas pu trouver de différence entre eux. Je dis que la réponse de Bruno est incorrecte. Plutôt pour le pur navigationController, cela ne fait aucune différence. Je n'ai pas essayé tabBarController
Honey
20

Rapide

// remove left buttons (in case you added some)
 self.navigationItem.leftBarButtonItems = []
// hide the default back buttons
 self.navigationItem.hidesBackButton = true
Marwen Doukh
la source
Il est clair que navigationItem.hidesBackButton = true est la bonne réponse. S'il y a des boutons de gauche, ce qui peut être le cas, alors c'est certainement la bonne réponse et devrait être considérée comme la réponse la plus complète.
truedat101
self.navigationItem.hidesBackButton = trueSon fonctionnement comme prévu.
Shahabuddin Vansiwala
9

Cela se trouve également dans la documentation de la classe UINavigationController:

navigationItem.hidesBackButton = true
Amiru Homushi
la source
6

Mettez-le dans la viewDidLoadméthode

navigationItem.hidesBackButton = true 
Harjeet Singh
la source
1

Vous pouvez essayer avec le code ci-dessous

override func viewDidAppear(_ animated: Bool) {
    self.navigationController?.isNavigationBarHidden = true
}
Dilip Jangid
la source
Ce n'est pas une réponse à cette question.
Boris Nikolic
0

Voici une version de la réponse dans

Swift 5

que vous pouvez l'utiliser à partir du storyboard:

// MARK: - Hiding Back Button

extension UINavigationItem {

    /// A Boolean value that determines whether the back button is hidden.
    ///
    /// When set to `true`, the back button is hidden when this navigation item
    /// is the top item. This is true regardless of the value in the
    /// `leftItemsSupplementBackButton` property. When set to `false`, the back button
    /// is shown if it is still present. (It can be replaced by values in either
    /// the `leftBarButtonItem` or `leftBarButtonItems` properties.) The default value is `false`.
    @IBInspectable var hideBackButton: Bool {
        get { hidesBackButton }
        set { hidesBackButton = newValue }
    }
}

Chaque élément de navigation d'un contrôleur de vue aura cette nouvelle propriété dans la section supérieure de l'inspecteur d'attributs

Stoyan
la source
0

Cela a fonctionné pour moi dans Swift 5 comme un charme, ajoutez-le simplement à votre vueDidLoad ()

self.navigationItem.setHidesBackButton(true, animated: true)
Matan
la source
-4

entrez la description de l'image ici

Accédez à l'inspecteur d'attributs et décochez la case Afficher la barre de navigation pour masquer le bouton de retour.

neeraj sachdeva
la source