Swift 更改导航 ViewController 堆栈(以编程方式)

Swift Changing Navigation ViewController stack (programatically)

我的应用程序逻辑有问题。

我一直在寻找一种方法来更改导航控制器的 viewcontroller 堆栈。

有几个原因。

第一,我有一个登录和注册页面,每个页面都有推送到另一个视图控制器的按钮。创建一个能够在它们之间穿梭的 /infinite/ 循环。

我还需要在用户登录后将 topViewController 更改为我的 dashboard_VC。因此登录页面的后退按钮不会显示...

一段时间以来,我一直在努力寻找解决方案。我一直主要关注 rootViewController,直到我意识到这可能不是我要找的那个,因为我的 rootViewController 是我的 navigationController 而不是堆栈中的第一个 View Controller。

所以我试着用这个改变堆栈:

self.navigationController?.setViewControllers([LandingPageVC(),LoginVC()], animated: false)

但是这会导致无限循环。因为每次加载这个 viewController 时它 运行s,当它是 运行 时,它似乎重新加载所有 viewcontrollers...

我试着把它放在 viewDidAppearAnimated 中。但结果相同。从那以后,我一直试图将它放在 viewDidLoad 或 Appear 方法之外。但我无法让它工作,因为 class 没有 "navigationController"。

如有任何帮助,我们将不胜感激!

(我没有使用故事板)

在您过渡 ViewController (Dashboard_VC):

    override init() {
        super.init()
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    }  

在您 登录视图控制器的过渡中:

if (successfulLogin) {    
    let mainController = DashBoardViewController()
    mainController.navigationItem.setHidesBackButton(true, animated: false)
    navigationController!.pushViewController(mainViewController, animated: false)
}