我不得不在我的应用程序中添加一个导航控制器,这样我就可以使用左边的抽屉菜单(使用SWRevealViewController),但它会弄乱我的segues。我最初的设计有一个登录屏幕,根据一个状态指示器,它可以切换到4个不同的场景中的一个。
现在我必须添加一个导航控制器,看起来我必须让用户按顺序浏览堆栈中的每个屏幕,直到他们到达相关屏幕。有没有办法跳过第一个屏幕或第二个屏幕?或者在我导航时不显示它们的方法。
我试着把performsgue放到viewWillLoad委托方法中,但是在进入下一个场景之前屏幕仍然加载。

最佳答案

将情节提要ID添加到最终将推送的所有视图/导航控制器:
ios - 如何将场景隔离到导航 Controller 堆栈中几层?-LMLPHP
现在要推送所需的视图,这取决于当前的视图控制器是否位于导航控制器堆栈的内部或外部:
如果您的VC已经在导航控制器堆栈中
从当前ViewController按所需视图:

if let myViewController = self.storyboard?.instantiateViewControllerWithIdentifier("myViewController") as? MyViewControllerClassName {
     self.navigationController?.pushViewController(myViewController, animated: true)
}

注意:as? MyViewControllerClassName仅在视图控制器的类不是默认的UIViewController而是扩展它的自定义类时才需要。
如果您的VC不在导航控制器堆栈中
同样的原理也适用,只是这一次在按下所需的视图控制器之前,您需要按下导航控制器本身:
if let newNavController = self.storyboard?.instantiateViewControllerWithIdentifier("myNavigationController") as? UINavigationController {
    self.view.window?.rootViewController = newNavController

    // Now push the desired VC as the example above, only this time your reference to your nav controller is different
    if let myViewController = self.storyboard?.instantiateViewControllerWithIdentifier("myViewController") as? MyViewControllerClassName {
         newNavController.pushViewController(myViewController, animated: true)
    }

}

关于ios - 如何将场景隔离到导航 Controller 堆栈中几层?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34663587/

10-14 20:47
查看更多