在我的代码中,导航控制器堆栈中的一个视图控制器将自身设置为其viewDidLoad中navigationController
的委托。我这样做是为了为推送操作提供一个自定义动画器。我仅提供navigationController(_:animationControllerFor:from:to:)
的实现,而没有其他提供。
我还确保在任何重写的方法中都不会丢失对super
的任何调用。
但是这样做的副作用是交互式弹出手势已停止工作,即当我执行该手势时,什么也没发生。
在深入研究时,我发现这是由interactivePopGestureRecognizer
的委托引起的。该委托是系统提供的。我没有在代码中的任何地方设置它。
我发现,当我设置navigationController
的委托人时,interactivePopGestureRecognizer
的委托人通过为{{1}返回 false 来阻止手势。 }。
我想知道为什么会这样。
我确实在stackOverflow here和here上找到了解决此问题的方法,但问题的原因还有其他原因。
我想学习的是这种情况的根本原因。为什么iOS在设置navigationController的委托时禁用该行为。
是否需要做其他事情才能使其正常工作?我的意思是使它正常工作,即系统为func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool
提供的委托允许手势。不是通过编写替代方法代码来完成的,而是通过上面的链接完成的。
我也浏览了Apple的UINavigationController文档,但没有发现任何可以解释此问题的东西。