В моем коде один из контроллеров представления в стеке контроллера навигации устанавливает себя как делегат navigationController
в его viewDidLoad. Я делаю это, чтобы предоставить пользовательский аниматор для операции push. Я предоставляю реализацию только для navigationController(_:animationControllerFor:from:to:)
и ничего больше.
Я также гарантировал, что не пропущу ни одного вызова super
ни в одном из переопределенных методов.
Но побочным эффектом этого является то, что интерактивный жест перестал работать т.е. когда я выполняю жест, ничего не происходит.
При копании глубже я обнаружил, что это вызвано делегатом interactivePopGestureRecognizer
. Этот делегат предоставляется системой. Я не устанавливаю это нигде в моем коде.
Я обнаружил, что когда я устанавливаю делегата navigationController
, делегат interactivePopGestureRecognizer
блокирует жест, возвращая false для func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool
.
Я хочу знать, почему происходит такое поведение.
Я нашел обходные пути для этой проблемы в stackOverflow здесь и здесь но там причина проблемы в другом.
То, что я хочу узнать, является основной причиной такого поведения в моем случае. Почему iOS отключает поведение при настройке делегата navigationController.
Должен ли я сделать что-то еще, чтобы это работало? Под этим я подразумеваю заставить его работать должным образом, т. Е. Система, предоставленная делегатом для interactivePopGestureRecognizer
, допускает жесты. Не путем написания обходного кода, что делается по ссылкам выше.
Я также просмотрел документацию Apple для UINavigationController, но не нашел ничего, что могло бы объяснить эту проблему.