ios - 当滑动到pop viewController时如何识别interactivePopGestureRecognizer是否成功进行?

标签 ios objective-c iphone swift uigesturerecognizer

我想在用户滑动页面弹出 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/

相关文章:

ios - 在倒计时结束时重置或更改按钮标题

iphone - 使用正则表达式在 Xcode 中查找/替换

iphone - 弹奏一定频率的音符

iphone - 顺序 UIView 变换

ios - 如何区分 UICollectionViewLayout 准备布局的原因(iOS 6)?

objective-c - 如何从 UIColor 获取反色?

iOS10语音识别 "Listening"音效

ios - IB Designables : Failed to render and update auto layout status (Google Maps)

javascript - 如何检查结果是否为 __NSCFNumber?

ios - 在 ios 上,在 ionic 混合应用程序中,如何绕过证书检查(使用自签名证书)