我想在用户滑动页面以弹出viewController时清理一些属性,只需使其与点击后退按钮一样工作。
我尝试以下代码,但它失败了,因为每次刷卡都不成功。弹出的一些滑动可能会失败,因为手势被取消了。
我在UIGestureRecognizer中找不到足够好的委托(找到像touchesEnded
这样的东西)。我也不能使用目标操作,因为操作将被调用太多次。
func viewWillAppear(_ animated: Bool) {
self.navigationController.interactivePopGestureRecognizer.delegate = self
}
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
viewModel.goBackPage(isSwipeBack: true)
return true
}
如何在滑动时解决触发器backButtonPressed
以适时弹出viewController?
答案 0 :(得分:0)
天啊,在@Sam_M(https://stackoverflow.com/users/6739471/sam-m)的评论的帮助下,我解决了它!
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if isSwipePop {
viewModel.goBackPage(withPopViewController: true)
}
}
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
switch gestureRecognizer.state {
case .possible, .began, .changed:
isSwipePop = true
default:
isSwipePop = false
}
return true
}
答案 1 :(得分:0)
我发现即使刷卡不成功,也会调用viewWillDisappear
。所以我把它改成了这个:
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("viewDidDisappear \(self)")
if isSwipePop && isMovingFromParentViewController {
viewModel.goBackPage(withPopViewController: true)
}
isSwipePop = false
}
有关详细信息,请参阅从第2页到第1页的刷卡方案。
从第二页开始向第一页滑动,在中途向第一页一起放行,然后它反弹回到第二页:
viewWillDisappear第二页
viewWillAppear Page One
viewWillDisappear Page One
viewDidDisappear Page One
viewWillAppear第二页
viewDidAppear第二页
成功从第二页滑到第一页:
viewWillDisappear第二页
viewWillAppear Page One
viewDidDisappear第二页
viewDidAppear Page One