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;
        }
    }

我是这样解决的