在我当前的项目中,我使用了一个主要的 UINavigationController 并且我已经推送了我想要呈现的每个控制器。此外,我已经从 UINavigationController 的默认用户体验中启用了弹出手势,当我在屏幕的左侧边缘滑动时,它会弹出我的视图控制器并且一切正常。
self.navigationController?.interactivePopGestureRecognizer?.isEnabled = false
self.navigationController?.interactivePopGestureRecognizer?.delegate = self
extension MyCustomViewController: UIGestureRecognizerDelegate{
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return gestureRecognizer.isKind(of: UIScreenEdgePanGestureRecognizer.self)
}
}
但在某些情况下,我需要在滑动 ViewController 时处理特定的操作。而不是弹出我的 ViewController,我想使用这个功能:
extension UINavigationController {
func backToViewController(vc: Swift.AnyClass) {
for element in viewControllers as Array {
if element.isKind(of: vc) {
self.popToViewController(element, animated: true)
break
}
}
}
}