通过名称的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; } }
我像这样解决了。