之前控制器从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
网友评论