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)
}
我的应用程序逻辑有问题。
我一直在寻找一种方法来更改导航控制器的 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)
}