通过名称的iOS Swift popToViewController

我试图popup一个viewcontroller,我相信是索引0.我的ViewController名称是HomeVC。

self.navigationController!.popToViewController(self.navigationController!.viewControllers[0] as! UIViewController, animated: true) 

但是,上面的代码只是让我回到最近的视图控制器。 不知道为什么它不会去我的HomeVC视图控制器。 他们的方式我可以使用ViewController名称来popup它?

尝试这个:

 for (var i = 0; i < self.navigationController?.viewControllers.count; i++) { if(self.navigationController?.viewControllers[i].isKindOfClass(YourDesiredViewController) == true) { self.navigationController?.popToViewController(self.navigationController!.viewControllers[i] as! DestinationViewController, animated: true) break; } } 

您可以使用popToRootViewControllerAnimated在索引零处popup到视图控制器。

它返回一个被popup的视图控制器的数组,这可能会帮助您debugging问题。

添加以下UINavigationController扩展

 extension UINavigationController { func popToClass<T: UIViewController>(type: T.Type) -> Bool { for viewController in self.viewControllers { guard let _ = viewController as? T else { continue } self.popToViewController(viewController, animated: true) return true } return false } } 

使用如下

 let success = navigationController.popToClass(MyVC.self) 
  for viewController in (self.navigationController?.viewControllers)! { if(viewController is YourViewController) { self.navigationController?.popToViewController(viewController, animated: true) break; } } 

我像这样解决了。