侧滑手势页面越级返回问题

之前控制器从A->B->C,然后在C点击返回按钮的时候需要跳过B直接返回到A,常用的方法就是给返回按钮添加自定义事件,调用popToViewController方法。

func goback() {
    if let viewControllers = navigationController?.viewControllers {
        for vc in viewControllers {
            if vc is A {
                navigationController?.popToViewController(vc, animated: true)
                break
            }
        }
    }
}

但是给页面添加了侧滑返回手势UIScreenEdgePanGestureRecognizer之后,如果通过侧滑手势返回的话,这个方法就不好使了,因为页面直接从C滑到了B。

看网上有人说需要做一个假动画,然后再进行越级跳转的操作,感觉比较费事,就没仔细研究,看到另外一种思路挺好的:
在B->C push的时候,
[B.navigationController setViewControllers:@[A, C] animated:YES];

// B->C
func jumpToC() {
    self.navigationController?.pushViewController(C, animated: true)
    let count = self.navigationController?.viewControllers.count ?? 0
    self.navigationController?.viewControllers.remove(at: count - 2)
}

这样由于ViewControllers中只有A,C,干掉了B,所以从C侧滑返回的时候就回到了A,同时C中的导航栏左侧的返回按钮也不需要自定义返回事件了

其他侧滑返回手势遇到的问题,可以看下:
屏幕边缘侧滑返回手势 UIScreenEdgePanGestureRecognizer

你可能感兴趣的:(侧滑手势页面越级返回问题)