【发布时间】:2023-03-22 14:32:02
【问题描述】:
AppDelegate
initialViewController = storyboard.instantiateViewControllerWithIdentifier("LoginViewController")as! UIViewController
}
self.window?.rootViewController = initialViewController
self.window?.makeKeyAndVisible()
带我到 LoginViewController
let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("CardsNavController") as? UIViewController
self.presentViewController(vc!, animated: true, completion: nil)
我点击登录按钮将我带到 CardsViewController
func goToProfile(button: UIBarButtonItem) {
pageController.goToPreviousVC()
}
单击作为 UINavigationController 一部分的后退按钮会运行 goToProfile(上图)并将我带到 ViewController.swift,因为这是声明 pageController 的地方。
let pageController = ViewController(transitionStyle: UIPageViewControllerTransitionStyle.Scroll, navigationOrientation: UIPageViewControllerNavigationOrientation.Horizontal, options: nil)
错误显示在这里
func goToPreviousVC() {
//let currentControllers = self.navigationController?.viewControllers
if viewControllers.isEmpty {
setViewControllers([profileVC], direction: UIPageViewControllerNavigationDirection.Reverse, animated: true, completion: nil)
pageController.presentViewController(profileVC, animated: true, completion: nil)
else {
let previousVC = pageViewController(self, viewControllerBeforeViewController: viewControllers[0] as! UIViewController)!
setViewControllers([previousVC], direction: UIPageViewControllerNavigationDirection.Reverse, animated: true, completion: nil)
}
错误:
Warning: Attempt to present <UINavigationController: 0x15ce314e0> on <MyApp.ViewController: 0x15cd2c6f0> whose view is not in the window hierarchy!
基本上流程是这样的 AppDelegate -> LoginViewController -> ViewController,我需要进入 ProfileViewController。
ProfileView 有 ProfileNavController 而 CardsView 有 CardsNavController
ViewController 的 storyboardID 为 pageController。
ProfileView 和 CardsView 都嵌入在 UINavigationControllers 中(因此是 NavController 扩展)。
我在全新安装后第二次运行该应用程序时,它运行良好(所有控制器都正常加载)。我应该在 AppDelegate 中推送 viewController 吗?
【问题讨论】:
-
请添加您的故事板的屏幕截图..
-
嗨 Nishant 我提供了截图
-
我认为您需要为情节提要创建对象。并在
self.window = UIWindow(frame: UIScreen.mainScreen().bounds) var storyboard = UIStoryboard(name: "Main", bundle: nil)之前写下这一行。此外,一旦签入情节提要,您就已将情节提要给所有视图控制器?此外,您在哪里调用方法go to previous vc?尝试更改您声明的方法的位置,因为有时在方法执行之前它会找到视图控制器。有时由于声明太短,我们也会出错。 -
viewControllers都有一个storyboardID。问题是第一次它第一次不起作用,但在第二次运行时它起作用。基本上 viewControllers 数组第一次是空的,但在程序的后续启动时不是。
-
你能发布完整的
goToPreviousVC方法吗?