oc中viewcontroller如何区分是通过pop方法还是手势右滑关闭的
在iOS开发中,可以通过以下方法来区分是通过pop方法还是手势右滑关闭的:
- 通过UINavigationControllerDelegate方法来判断:实现UINavigationControllerDelegate代理方法
navigationController:willShowViewController:animated:,在该方法中可以获取到即将显示的ViewController和当前的ViewController。当通过pop方法关闭时,即将显示的ViewController是当前的ViewController的前一个ViewController;而当通过手势右滑关闭时,即将显示的ViewController是当前的ViewController本身。可以通过比较这两个ViewController的引用来判断是通过pop方法还是手势右滑关闭的。
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
guard let viewControllers = navigationController.viewControllers else { return }
let previousViewController = viewControllers.count >= 2 ? viewControllers[viewControllers.count - 2] : nil
if previousViewController == viewController {
// 通过pop方法关闭
} else {
// 通过手势右滑关闭
}
}
- 通过侧滑手势识别器来判断:可以获取到UINavigationController的interactivePopGestureRecognizer属性,这是一个UIPanGestureRecognizer对象。可以通过添加手势识别器的代理来获取手势的状态,从而判断是通过pop方法还是手势右滑关闭的。
func viewDidLoad() {
super.viewDidLoad()
if let navigationController = navigationController {
navigationController.interactivePopGestureRecognizer?.delegate = self
}
}
extension YourViewController: UIGestureRecognizerDelegate {
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if gestureRecognizer == navigationController?.interactivePopGestureRecognizer {
// 通过手势右滑关闭
} else {
// 其他手势
}
return true
}
}
通过上述方法,你可以在UIViewController中区分是通过pop方法还是手势右滑关闭的
原文地址: http://www.cveoy.top/t/topic/hXH6 著作权归作者所有。请勿转载和采集!