方法是讓當前控制器取代導航的手勢代理,控制器消失時再還回去谢肾,略麻煩但無副作用
// 設(shè)置屬性保存導航的interactivePopGestureRecognizer的代理,記得使用weak標記弱引用
weak var savedGestureRecognizerDelegate:UIGestureRecognizerDelegate?
// 在進入控制器時保存導航的interactivePopGestureRecognizer屬性
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
savedGestureRecognizerDelegate = self.navigationController?.interactivePopGestureRecognizer?.delegate
self.navigationController?.interactivePopGestureRecognizer?.delegate = self
}
//離開控制器的時候乍惊,把導航的delegate還回去
override func viewWillDisappear(_ animated: Bool) {
self.navigationController?.interactivePopGestureRecognizer?.delegate = savedGestureRecognizerDelegate
}
//遵守UIGestureRecognizerDelegate協(xié)議膨处,把手勢返回的代理方法實現(xiàn)為空
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if gestureRecognizer == self.navigationController?.interactivePopGestureRecognizer {
return false
}
return true
}