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.
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)
Ajouter ce code
[self.navigationItem setHidesBackButton:YES];
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;
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.
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.
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é de cette façon ->
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20, 30)]] ;
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
Dans mon cas, j'ai eu peu de problèmes avec les réponses actuelles:
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 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 :)
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 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
}
}
}
Cela cache le bouton de retour
let backBtn = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: navigationController, action: nil)
navigationItem.leftBarButtonItem = backBtn
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)