2014-08-28 2 views
5

Я заметил что-то странное и может быть ошибкой в ​​UINavigationController. Когда вы переопределяете -navigationController:animationControllerForOperation:fromViewController:toViewController:Пользовательская анимация UINavigationController предотвращает работу от удачной работы

и возвращаете ноль (для поведения анимации по умолчанию), жест перетаскивания назад не работает. В документации для этого метода указано, что вы должны вернуть «nil, если хотите использовать стандартные переходы навигационного контроллера». Мое прочтение этого заключается в том, что возвращение nil не должно препятствовать тому, чтобы поведение по умолчанию происходило.

Я также обнаружил, что если интерактивный контроллер навигационных контроллеровPopGestureRecognizer.delegate с чем-то, возвращающим ДА для gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: Повтор поп-музыки снова работает. Однако это обходное решение является рискованным, так как мы топаем по установленному делегату по умолчанию, который является _UINavigationInteractiveTransition.

Есть ли способ переопределить метод animationController, сохраняя при этом жест по умолчанию для перетаскивания назад?

Это question связано.

+0

Возможный дубликат [iOS 7 использует пользовательские интерактивные переходы только некоторое время] (http://stackoverflow.com/questions/20113701/ios-7-use-custom-interactive-transitions-only-some-of-of- время) – jszumski

ответ

1

Если вы подклассы UINavigationController, самое простое исправление выглядит следующим образом (IOS 9.3, Swift 2.2):

override func viewDidLoad() { 
    super.viewDidLoad() 
    interactivePopGestureRecognizer?.delegate = nil 
} 

в качестве альтернативы, в любой другой экземпляр UIViewController:

override func viewDidLoad() { 
    super.viewDidLoad() 
    navigationController?.interactivePopGestureRecognizer?.delegate = nil 
} 

Внедрение метода делегата navigationController(_:animationControllerFor:from:to:) отключает интерактивный распознаватель распознавания жестов навигационного контроллера, но установка делегата gesture на nil повторно активирует его.

Если вы хотите, чтобы жест был включен в определенных обстоятельствах, см. this answer.

Смежные вопросы