【问题标题】:Popping to specific view controller in navigation stack WITHOUT seeing other VCs in between弹出到导航堆栈中的特定视图控制器,而不会在其间看到其他 VC
【发布时间】:2017-01-26 04:34:39
【问题描述】:

假设我在堆栈中有四个 VC:View1、View2、View3 和 View4。完成 View4 后,我想返回 View2 而不是跳到 View3。

我目前用来完成此操作的代码是:

let allViewControllers = self.navigationController?.viewControllers
       for thisVC in allViewControllers!{ 
           if thisVC.isKind(of: View2.self){
               self.navigationController?.popToViewController(thisVC, animated: true)
           }
       }

我遇到的问题是我在最终登陆 View2 之前看到 View3 动画。换句话说,我按下 View4 上调用上述代码的按钮,然后它会短暂弹出到 View3,然后再弹出到 View2。有什么方法可以直接跳转到 View2 而不会看到中间的 View3 吗?

如果相关,这里是我用来从 View3 推送 View4 的代码

let vc = self.storyboard!.instantiateViewController(withIdentifier: "View3") as! View3ViewController
self.navigationController?.pushViewController(vc, animated: true)

【问题讨论】:

  • 抱歉,我无法重现所描述的行为,无论是在设备上还是在模拟器中(即使有动画调试)。我没有看到中间的 ViewControllers,动画直接转到 View2 控制器。
  • 嗯,这很奇怪。从 View3 推送 View4 时,也许我做错了什么。我将编辑我的问题以包含该代码。

标签: swift uinavigationcontroller


【解决方案1】:

您可以通过使用视图控制器的故事板标识符来简单地实现这一点。

let mainStoryBoard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let view2 : UIViewController = mainStoryBoard.instantiateViewController(withIdentifier: "view_2_id") as UIViewController
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window?.rootViewController = view2
        self.window?.makeKeyAndVisible()

【讨论】:

  • 抱歉,这个答案完全错误 -- 它将创建一个 new ViewController 而不是 弹回旧的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多