【问题标题】:Swift Changing Navigation ViewController stack (programatically)快速更改导航 ViewController 堆栈(以编程方式)
【发布时间】:2015-05-12 05:40:40
【问题描述】:

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

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

有几个原因。

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

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

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

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

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

但是,这会导致无限循环。由于每次加载这个viewController时它都会运行,并且当它运行时,它似乎重新加载了所有的viewcontroller......

我尝试将其放入 viewDidAppearAnimated 中。但同样的结果。从那以后,我一直试图将它放在 viewDidLoad 或 Appear 方法之外。但我无法让它工作,因为该类没有“navigationController”。

任何帮助将不胜感激!

(我没有使用故事板)

【问题讨论】:

    标签: ios swift uiviewcontroller uinavigationcontroller


    【解决方案1】:

    在过渡 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)
    }    
    

    【讨论】:

    • 我将两者都添加到了我的项目中,它可以满足我的需求。但是,我很难看到第一部分代码的作用是什么?我将它从我的 Dashboard_VC 中取出,但没有看到任何变化。至于隐藏按钮,这只解决了我在仪表板和登录页面上的问题。当我在登录屏幕上单击“注册”时会怎样。或者反之亦然。那些屏幕仍然需要返回按钮,它应该只是转到landingPage_VC 而不是登录或注册。总的来说,非常感谢你的帮助,比我之前离开的地方飞跃了。
    • 因为你的标题是“以编程方式”,我假设你没有使用 Interface Builder,所以你需要 init(coder aDecoder) 在我们当前版本的 Swift 中实例化一个新的 VC。隐藏 Back Button 的行是 View Controller 的一个方法。它只隐藏该视图控制器。通常,有一个单独的 LogOut 过程,您不会从 main 回到 LoginVC,而是根据需要进行自定义。 themainthread.com/blog/2014/08/…
    • 感谢 ericgu 的解释!我真的很感激帮助!你不会碰巧也知道如何解决我的登录/注册问题?,因为这些页面应该仍然有返回按钮,所以总是带你到“Landingpage_VC”
    • 我认为您应该根据 StackOverFlow 的指南提出一个新问题。很可能有人会帮助你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多