所以我有3個視圖控制器:TableViewController,A和B.用戶能夠從任何視圖控制器導航到任何視圖控制器。popToViewController沒有彈出所有的視圖控制器
當用戶在A和B視圖控制器之間來回切換時,我希望它們被推到導航欄上。疊加。當按下「home」按鈕時,我希望視圖控制器全部使用popToViewController彈出回到TableViewController,而不是popToRootViewController(出於某種原因)。
我有部分工作代碼,彈出最後訪問的視圖控制器,但現在所有的人之間。
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if indexPath.row == 0 {
if let navController = self.navigationController {
for controller in navController.viewControllers {
if controller is TableViewController {
navController.popToViewController(controller, animated: true)
break
}
}
}
} else {
let vcName = identities[indexPath.row]
let viewController = storyboard?.instantiateViewController(withIdentifier: vcName)
self.navigationController?.pushViewController(viewController!, animated: true)
}
}
我不知道爲什麼所有的視圖控制器沒有被彈出。我用它來檢查什麼正在入棧和出棧
代碼:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
if self.isMovingToParentViewController {
print("A is pushed")
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
if self.isMovingFromParentViewController {
print("A is popped")
}
}
我也檢查內存增加。
我會在需要時提供更多的代碼/信息。
任何幫助將不勝感激。
嘗試在調用popToViewController後添加一個「break」。你不想繼續尋找你找到第一場比賽。 – rmaddy
如果for循環背後的想法是在循環內按順序彈出每個控制器,那麼必須等到動畫完成並彈出視圖控制器才能彈出下一個控制器。 – FryAnEgg
@rmaddy會'繼續'最好的工作嗎? –