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

时间:2018-01-05 08:08:08

标签: ios swift xcode applet

我遇到的问题是,如果屏幕(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了。

请回答如何可能,抱歉有错误。

2 个答案:

答案 0 :(得分:6)

如果您确切知道堆栈中视图控制器的索引,那么您只需使用:

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

答案 1 :(得分:0)

这样做,

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

self.navigationController.popToRootViewController(animated: true) 

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