我想在用户滑动页面弹出 viewController 时清理一些属性,使其与点击后退按钮一样工作。
我尝试了以下代码,但它失败了,因为并非每次滑动都会成功。由于手势被取消,某些弹出操作可能会失败。
而且我在 UIGestureRecognizer 中找不到足够好的委托(delegate)(以找到类似 touchesEnded
的东西)。我也不能使用目标操作,因为操作会被调用太多次。
func viewWillAppear(_ animated: Bool) {
self.navigationController.interactivePopGestureRecognizer.delegate = self
}
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
viewModel.goBackPage(isSwipeBack: true)
return true
}
如何在正确的时刻解决滑动弹出 viewController 时触发 backButtonPressed
的问题?
最佳答案
我发现即使刷卡不成功也会调用viewWillDisappear
。所以我把它改成这样:
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("viewDidDisappear \(self)")
if isSwipePop && isMovingFromParentViewController {
viewModel.goBackPage(withPopViewController: true)
}
isSwipePop = false
}
<小时/>
有关详细信息,这是从第二页滑动到第一页的场景。
从第二页滑动到第一页,滑动到第一页中途松开,则弹回到第二页:
viewWillDisappear 第二页
viewWillAppear 第一页
viewWillDisappear 第一页
viewDidDisappear 第一页
viewWillAppear 第二页
viewDidAppear 第二页
成功从第二页滑动到第一页:
viewWillDisappear 第二页
viewWillAppear 第一页
viewDidDisappear 第二页
viewDidAppear 第一页
关于ios - 当滑动到pop viewController时如何识别interactivePopGestureRecognizer是否成功进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45321714/