Question

Savez-vous comment cacher le bouton « retour » dans un UINavigationController? En outre, comment le montrer en arrière, mais je suppose que c'est très semblable à cacher ...

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

Était-ce utile?

La solution

Je viens de découvrir la réponse, dans une utilisation du contrôleur ceci:

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

Et pour restaurer:

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

-

[UPDATE]

Swift 3.0:

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

Autres conseils

Ajoutez ce code

[self.navigationItem setHidesBackButton:YES];

En plus de retirer le bouton de retour (en utilisant les méthodes déjà recommandées), ne pas oublier l'utilisateur peut encore « pop » à l'écran précédent avec un geste de balayage de gauche à droite dans iOS 7 et versions ultérieures.

Pour désactiver ce que (le cas échéant), mettre en œuvre ce qui suit (en viewDidLoad par exemple):

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

Juste pour clarifier les réponses existantes: la propriété hidesBackButton est la bonne réponse, mais on ne sait pas dans de nombreuses réponses que self fait référence. Fondamentalement, vous devez définir self.navigationItem.hidesBackButton = YES dans le contrôleur de vue qui est sur le point d'obtenir poussé (ou juste été poussé) sur le UINavigationController.

En d'autres termes, que j'ai un UINavigationController nommé myNavController. Je veux mettre une nouvelle vision, et quand je fais, je ne veux pas le bouton de retour pour montrer plus. Je pouvais 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 être montrer, et aucun bouton de retour doit être visible.

Pour cacher et montrer le bouton Retour, vous pouvez utiliser conditionnellement 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 mettre dans la méthode viewDidAppear au lieu de viewWillAppear ces cas comme: lorsque vous mettez à jour tableau de la classe suivante dans la classe précédente et puis vérifier l'état dans la classe suivante comme ci-dessus.

Swift iOS (je l'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'utilisé de cette façon ->

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

Utilisez toujours d'Apple Documentation pour les questions simples, ils sont plus simples et léger:)

Voici la syntaxe pour Swift 3.0:

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

Référence

https: // développeur .apple.com / référence / UIKit / uinavigationitem # // apple_ref / occ / INSTM / UINavigationItem / setHidesBackButton: animation:

Dans mon cas, j'ai eu quelques problèmes avec des réponses actuelles:

  • à l'intérieur viewDidLoad / viewWillAppear seule icône en arrière était caché et la chaîne « Retour » est inactive mais toujours visible
  • à l'intérieur viewDidAppear le bouton de retour a disparu ... mais je ne voulais pas l'utilisateur de voir du tout

Donc, la solution qui a finalement ont travaillé pour moi est:

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];

    if (self) {
        [self.navigationItem setHidesBackButton:YES animated:NO];
    }

    return self;
}

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

Ce code ne fonctionne cependant:

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

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

[controller release];

vous auriez aussi bien avoir à manipuler un NSArray à votre goût pour le faire fonctionner pour vous. Hope qui 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];
}

Ce cache le bouton de retour et le remplace par un bouton Ajouter à 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 général, vous devez utiliser l'API d'Apple par-ViewController comme décrit à plusieurs reprises déjà sur cette page, mais parfois vous avez besoin d'un contrôle immédiat du bouton Retour.

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

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

Ce cache le bouton de retour

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


navigationItem.leftBarButtonItem = backBtn
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top