Je remarque donc que tous mes points de vue reçoivent le geste de revenir en arrière (afficher une vue) lorsque l'utilisateur fait glisser le curseur tout à gauche de l'écran (dans l'un ou l'autre sens) ( Ceci est nouveau avec iOS7 )
J'ai essayé jusqu'ici sans succès de l'éteindre en utilisant:
[self.navigationItem setHidesBackButton:YES];
Dans l'init du NavigationController lui-même (comme le délégué semble l'utiliser).
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
navigationController?.interactivePopGestureRecognizer?.isEnabled = false
Ajout à la solution de Gabriele.
Pour prendre en charge tout iOS avant iOS 7, vous devrez envelopper ce code avec ceci:
if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
Cela empêchera l'application de se bloquer dans iOS 6 et iOS 5 en raison d'un sélecteur manquant.
J'utilise cette solution dans mon projet, elle désactive uniquement interactivePopGestureRecognizer et vous permet d'utiliser un autre identificateur de mouvements.
- (void)viewDidLoad {
[super viewDidLoad];
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
if ([gestureRecognizer isEqual:self.navigationController.interactivePopGestureRecognizer]) {
return NO;
} else {
return YES;
}
}
J'ai découvert que régler le geste sur désactivé ne fonctionnait pas toujours. Cela fonctionne, mais pour moi, cela n'a fonctionné qu'après avoir utilisé le backgesture. Deuxième fois, cela ne déclencherait pas le backgesture.
Fix pour moi était de déléguer le geste et d'implémenter la méthode shouldbegin pour renvoyer NO:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// Disable iOS 7 back gesture
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
// Enable iOS 7 back gesture
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
}
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
return NO;
}
Pour IOS 8 (Swift):
class MainNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
self.interactivePopGestureRecognizer.enabled = false
// Do any additional setup after loading the view.
}
}
Utilisez ce code pour les versions antérieures à iOS 7
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}