在 iOS 7 后,我们使用系统提供的 UINavigationController 时,都会带有一个左侧侧滑就返回上一级 ViewController 的功能。但是如果我们使用自定义的 UINavigationController 时,这个功能就会被取消。包括自定义了返回按钮、自定义了导航栏等等。
我们如果想要恢复这个功能,就需要在 UINavigationViewController 的代理方法中进行管理。
class NavigationViewController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
//设置 NavigationViewController 的代理为自己
self.interactivePopGestureRecognizer?.delegate = self
}
}
// 扩展
extension NavigationViewController: UIGestureRecognizerDelegate {
func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
// 如果当前试图是根视图,强行返回会导致 bug。所以要判断子视图的数量。
return self.childViewControllers.count > 1
}
}