如何打开堆栈中已有的屏幕而不是在 IOS 中创建新屏幕

How to open screen already in stack instead of creating new one in IOS

我遇到一个问题,如果屏幕 (ViewController) 已经在堆栈中,则无法再次打开它。让 V1 是一个视图控制器。我从 V1 转到 v2,如 V1->V2,然后是 V2->V3。现在我想从 V3 打开 V1。我正在使用 NavigationViewController 打开屏幕 -

let help = V1(nibName : "V1" , bundle:  nil)
navViewcontroller?.navigationController?.pushViewController(help, animated: true)

这会创建一个新的 V1 屏幕我无法使用已经堆叠的 V1。

请回答怎么可能,如有错误请见谅。

这样做,

if let navController = self.navigationController, let VC1 = navController.viewControllers.first {
     _ = self.navigationController?.popToViewController(VC1 as! YourVC, animated: true)
}

self.navigationController.popToRootViewController(animated: true) 

//注意:如果 VC1 是基本导航控制器,这些将起作用

如果您确切知道堆栈中视图控制器的索引,那么您可以简单地使用:

let viewController = navigationController?.viewControllers[index]
navigationController?.popToViewController(viewController, animated: true)

否则你可以遍历你的视图控制器并找到它:

for viewController in (navigationController?.viewControllers)! {
    if viewController is LoginMobileVC { // LoginMobileVC is your view controller class
        navigationController?.popToViewController(viewController, animated: true)
        break
    }
}