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

时间:2015-03-10 16:53:33

标签: ios swift uiviewcontroller uinavigationcontroller

我的应用程序中的逻辑遇到了一些问题。

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

有几个原因。

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

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

我一直试图找到解决方案。我一直在看rootViewController,直到我意识到这可能不是我正在寻找的那个,因为我的rootViewController是我的navigationController而不是我在堆栈中的第一个View Controller。

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

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

然而,这会导致无限循环。因为它每次加载这个viewController时运行,并且当它运行时,它似乎重新加载所有的viewcontrollers ......

我尝试将它放在viewDidAppearAnimated中。但结果相同。从那时起我一直试图把它放在viewDidLoad或Appear方法之外。但由于课程没有“navigationController”,我无法让它工作。

非常感谢任何帮助!

(我没有使用故事板)

1 个答案:

答案 0 :(得分:2)

在转换转换为 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)
}