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

之前控制器从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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。