之前控制器從A->B->C,然后在C點(diǎn)擊返回按鈕的時(shí)候需要跳過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è)滑返回手勢(shì)UIScreenEdgePanGestureRecognizer
之后,如果通過側(cè)滑手勢(shì)返回的話咧织,這個(gè)方法就不好使了嗓袱,因?yàn)轫撁嬷苯訌腃滑到了B。
看網(wǎng)上有人說需要做一個(gè)假動(dòng)畫习绢,然后再進(jìn)行越級(jí)跳轉(zhuǎn)的操作渠抹,感覺比較費(fèi)事蝙昙,就沒仔細(xì)研究,看到另外一種思路挺好的:
在B->C push的時(shí)候梧却,
[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è)滑返回的時(shí)候就回到了A放航,同時(shí)C中的導(dǎo)航欄左側(cè)的返回按鈕也不需要自定義返回事件了大刊。
其他側(cè)滑返回手勢(shì)遇到的問題,可以看下:
屏幕邊緣側(cè)滑返回手勢(shì) UIScreenEdgePanGestureRecognizer