之前有一次设置了self.window.rootViewController = newViewController。但是没有把newViewController放入UINavigationController导航栈,结果一直跳转不了页面。浪费了很多时间。
UINavigationController导航控制器
UINavigationController,它用来管理视图控制器的层次结构,并提供导航栏(NavigationBar)来帮助用户在不同的视图控制器之间进行导航。通过这种方式,可以方便地实现页面之间的前进和后退操作。
使用UINavigationController
创建 UINavigationController:
通常情况下,你会将一个视图控制器设置为根视图控制器(root view controller),然后把这个视图控制器传给 UINavigationController 的初始化方法。
let viewController = ViewController()
// 将它嵌入到导航控制器中
let navController = UINavigationController(rootViewController: viewController)
// 创建一个 UIWindow 实例,指定其 windowScene,并将导航控制器设置为其根视图控制器
self.window = UIWindow(windowScene: windowScene)
self.window?.rootViewController = navController
self.window?.makeKeyAndVisible()
推送新视图控制器 页面导航:
要从当前视图控制器导航到另一个视图控制器,你可以使用 pushViewController(_:animated:) 方法。
let nextViewController = NextViewController()
navigationController?.pushViewController(nextViewController, animated: true)
返回上一个视图控制器:
可以通过 popViewController(animated:) 方法返回到前一个视图控制器,或者使用 popToRootViewControllerAnimated(_:) 返回到根视图控制器。
Tab Bar Controller与Navigation Controller的2种组合方式
每个Tab包含一个Navigation Controller:
这是最常见的方式,每个标签页都有自己的 UINavigationController 作为其根视图控制器。这样,每个标签都可以独立地处理自己的导航流程。
- 创建多个
UINavigationController实例,每个实例都包含一个不同的根视图控制器。 - 将这些
UINavigationController实例添加到UITabBarController的viewControllers属性中。
let tabBarController = UITabBarController()
let firstNavController = UINavigationController(rootViewController: FirstViewController())
let secondNavController = UINavigationController(rootViewController: SecondViewController())
tabBarController.viewControllers = [firstNavController, secondNavController]
单一Navigation Controller用于所有Tabs
这种方式不太常见,因为每个标签页共享同一个导航栈可能会导致用户体验不佳。不过,在某些特定场景下,这种模式也可能是合适的。
- 在这种情况下,你首先需要创建一个
UINavigationController,然后将UITabBarController设置为其根视图控制器,或反之亦然,取决于具体需求。
// 创建两个简单的View Controllers作为Tab的内容
let vc1 = UIViewController()
vc1.view.backgroundColor = .white
vc1.tabBarItem.title = "首页"
let vc2 = UIViewController()
vc2.view.backgroundColor = .lightGray
vc2.tabBarItem.title = "设置"
// 创建Tab Bar Controller并添加View Controllers
let tabBarController = UITabBarController()
tabBarController.viewControllers = [vc1, vc2]
// 创建Navigation Controller并将Tab Bar Controller设为其root view controller
let navController = UINavigationController(rootViewController: tabBarController)
// 设置window的rootViewController为Navigation Controller
window?.rootViewController = navController
window?.makeKeyAndVisible()