【问题标题】:How to open screen already in stack instead of creating new one in IOS如何在堆栈中打开屏幕而不是在IOS中创建新屏幕
【发布时间】:2018-01-05 08:08:07
【问题描述】:

我面临一个问题,如果屏幕(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。

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

【问题讨论】:

标签: ios swift xcode applet


【解决方案1】:

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

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

【讨论】:

  • 如何使用 navigationController 获取视图控制器的数量.. 以便我可以使用 for 循环查找现有的
  • @SanjayMajoka 使用 let count = navigationController?.viewControllers.count
【解决方案2】:

这样做,

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

self.navigationController.popToRootViewController(animated: true) 

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多