Ich stelle fest, dass alle meine Ansichten die Geste erhalten, um zurückzukehren (eine Ansicht aufzurufen), wenn der Benutzer ganz links auf dem Bildschirm (in beiden Richtungen) wischt ( Das ist neu bei iOS7 )
Ich habe bisher versucht, es ohne Erfolg auszuschalten:
[self.navigationItem setHidesBackButton:YES];
Innerhalb des init des NavigationsControllers selbst (da der Delegat dies zu verwenden scheint).
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
navigationController?.interactivePopGestureRecognizer?.isEnabled = false
Hinzufügen zu Gabrieles Lösung.
Um ein beliebiges iOS vor iOS 7 zu unterstützen, müssen Sie diesen Code mit folgendem Code versehen:
if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
Dadurch wird die App in iOS 6 und iOS 5 wegen fehlender Auswahl zum Absturz gebracht.
Ich verwende diese Lösung in meinem Projekt. Sie deaktiviert nur interactivePopGestureRecognizer und ermöglicht die Verwendung einer anderen Gestenerkennung.
- (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;
}
}
Ich fand heraus, dass das Festlegen der Geste auf "deaktiviert" nur nicht immer funktioniert. Es funktioniert, aber für mich erst, nachdem ich die Backgesture einmal verwendet habe. Beim zweiten Mal würde die Backgesture nicht ausgelöst.
Fix für mich war das Delegieren der Geste und Implementieren der solltebeginn-Methode, um NEIN zurückzugeben:
- (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;
}
Für IOS 8 (Swift):
class MainNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
self.interactivePopGestureRecognizer.enabled = false
// Do any additional setup after loading the view.
}
}
Verwenden Sie diesen Code vor iOS 7
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}