UINavigationController interactivePopGestureRecognizer работает ненормально в iOS7

В iOS7 у нас появился новый жест "смахивание влево", это очень полезная функция, но теперь у меня возникла проблема с ней.

Я использую этот код для настройки кнопки "Назад" в UINavigationBar,

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:view];

но это отключит жест "смахивание слева направо", поэтому я использую следующий код, чтобы оставить жест включенным.

self.navigationController.interactivePopGestureRecognizer.delegate = self

И затем я обнаружил, что жест работает ненормально, если текущий ViewController имеет tableView, когда tableView прокручивается, жест не будет запущен. Теперь жест не может быть легко запущен, есть ли способ это исправить?

4 ответа

Решение

Этот код может работать хорошо для меня.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return [gestureRecognizer isKindOfClass:UIScreenEdgePanGestureRecognizer.class];
}

Настройка interactivePopGestureRecognizer.delegate в self это только первый шаг. Второй шаг заключается в реализации

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return ![otherGestureRecognizer isKindOfClass:UIPanGestureRecognizer.class];
}

Проверка на распознаватель жестов панорамирования необходима для блокировки вертикальной прокрутки прокрутки или представления таблицы во время выполнения интерактивного всплывающего окна.

Добавьте в контроллер класса "UIGestureRecognizerDelegate"

в ViewDidApper добавить

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    self.navigationController?.interactivePopGestureRecognizer.delegate =  self
}

знак равно

Решение, которое выложил Вэй, у меня не сработало. Мои экраны замерзали, теряя распознавание любых жестов.

Я сейчас использую AHKNavigationController от Аркадиуша Холко http://holko.pl/ios/2014/04/06/interactive-pop-gesture/

Мне потребовалось 30 секунд, чтобы получить доступ к CocoaPods, и еще 30 секунд, чтобы настроить пользовательский класс моего NavigatonController через раскадровки.

Другие вопросы по тегам