iOS Swift popToViewController 按名称
iOS Swift popToViewController by Name
我正在尝试弹出一个 viewcontroller,我认为它位于索引 0。我的 ViewController 名字是 HomeVC。
self.navigationController!.popToViewController(self.navigationController!.viewControllers[0] as! UIViewController, animated: true)
但是,上面的代码只会让我回到最近的 viewcontroller。不确定为什么它不进入我的 HomeVC viewcontroller。他们是我可以使用 ViewController 名称弹出的方法吗?
您可以使用 popToRootViewControllerAnimated
弹出索引零处的视图控制器。
它 returns 弹出的视图控制器数组,可能有助于您调试问题。
试试这个:
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;
}
}
添加以下 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;
}
}
我是这样解决的
我正在尝试弹出一个 viewcontroller,我认为它位于索引 0。我的 ViewController 名字是 HomeVC。
self.navigationController!.popToViewController(self.navigationController!.viewControllers[0] as! UIViewController, animated: true)
但是,上面的代码只会让我回到最近的 viewcontroller。不确定为什么它不进入我的 HomeVC viewcontroller。他们是我可以使用 ViewController 名称弹出的方法吗?
您可以使用 popToRootViewControllerAnimated
弹出索引零处的视图控制器。
它 returns 弹出的视图控制器数组,可能有助于您调试问题。
试试这个:
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;
}
}
添加以下 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;
}
}
我是这样解决的