web-dev-qa-db-de.com

Wie kann man die automatische Geste ausschalten, um eine Ansicht mit einem Navigations-Controller zurückzuschalten?

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).

22
Danoli3

obj-c

self.navigationController.interactivePopGestureRecognizer.enabled = NO;

Schnell

navigationController?.interactivePopGestureRecognizer?.isEnabled = false
72

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.

6
Danoli3

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;

    }

}
5
Userich

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;
}
4
Antoine

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.
    }

}
3
ilan

Verwenden Sie diesen Code vor iOS 7

if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
0
Shardul