Подтвердить что ты не робот

Как отключить автоматический жест, чтобы вернуться к просмотру с помощью навигационного контроллера?

Итак, я замечаю, что все мои взгляды получают жест, чтобы вернуться (поп смотреть), когда пользователь перебирает левую часть экрана (в любой ориентации) (Это новое с iOS7)

Я пробовал до сих пор без возможности отключить его, используя:

    [self.navigationItem setHidesBackButton:YES];

В самом начале самого NavigationController (поскольку делегат, похоже, использует это).

4b9b3361

Ответ 1

Obj-C

self.navigationController.interactivePopGestureRecognizer.enabled = NO;

стремительные

navigationController?.interactivePopGestureRecognizer?.isEnabled = false

Ответ 2

Добавление к решению Габриэле.

Для поддержки любого iOS перед iOS 7 вам необходимо обернуть этот код следующим образом:

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

Это остановит сбой приложения в iOS 6 и iOS 5 для отсутствующего селектора.

Ответ 3

Я использую это решение в своем проекте, оно отключает только interactivePopGestureRecognizer и позволяет использовать другие распознаватели жестов.

- (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;

    }

}

Ответ 4

Я выяснил, что установка жестов для инвалидов только не всегда работает. Он работает, но для меня это произошло только после того, как я когда-то использовал заставку. Второй раз это не вызовет зарождение.

Исправить для меня было делегировать жест и реализовать метод shouldbegin для возврата 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;
}

Ответ 5

Для IOS 8 (Swift):

class MainNavigationController: UINavigationController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.interactivePopGestureRecognizer.enabled = false

        // Do any additional setup after loading the view.
    }

}

Ответ 6

Используйте этот код для предыдущего, чем iOS 7

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