之前控制器從A->B->C,然后在C點擊返回按鈕的時候需要跳過B直接返回到A,常用的方法就是給返回按鈕添加自定義事件,調(diào)用popToViewController方法。
func goback() {
if let viewControllers = navigationController?.viewControllers {
for vc in viewControllers {
if vc is A {
navigationController?.popToViewController(vc, animated: true)
break
}
}
}
}
但是給頁面添加了側(cè)滑返回手勢UIScreenEdgePanGestureRecognizer之后,如果通過側(cè)滑手勢返回的話,這個方法就不好使了,因為頁面直接從C滑到了B。
看網(wǎng)上有人說需要做一個假動畫,然后再進行越級跳轉(zhuǎn)的操作,感覺比較費事,就沒仔細研究,看到另外一種思路挺好的:
在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側(cè)滑返回的時候就回到了A,同時C中的導(dǎo)航欄左側(cè)的返回按鈕也不需要自定義返回事件了。
其他側(cè)滑返回手勢遇到的問題,可以看下:
屏幕邊緣側(cè)滑返回手勢 UIScreenEdgePanGestureRecognizer