同时设置UINavigationController的导航栏和rootViewController
Setting UINavigationController's navigation bar and rootViewController in the same time
我在尝试同时设置 UINavigationController
的 rootView
UIViewController 和 UINavigationBar
时遇到了难题。似乎 UINavigationController
可以用 rootViewController
启动:
let navController = UINavigationController(rootViewController: someViewController)
或者使用 UINavigatioBar,像这样:
let navController = UINavigationController(navigationBarClass: someUINavigationBar, toolbarClass: nil)
但是,我希望能够添加一个 rootViewController 以及一个自定义 UINavigationBar
。有什么办法吗?
我尝试将 UINavigationBar
设置为 navController.navigationController?.navigationBar = MyNavigationBar
然而, navigationController?.navigationBar 似乎只是一个 getter.
rootViewController
只是要显示的第一个视图控制器。虽然它似乎无法从任何地方访问,但您可以将 viewControllers
堆栈 属性 设置为一个视图控制器,即您的根。
这是一个带有便捷初始化器的扩展。
extension UINavigationController {
convenience init(navigationBarClass: Swift.AnyClass?, toolbarClass: Swift.AnyClass?, rootViewController: UIViewController) {
self.init(navigationBarClass: navigationBarClass, toolbarClass: toolbarClass)
self.viewControllers = [rootViewController]
}
}
为什么不在创建 navController
之后设置 rootViewController?
let navController = UINavigationController(navigationBarClass: someUINavigationBar, toolbarClass: nil)
navController.viewControllers = [someRootViewController]
我在尝试同时设置 UINavigationController
的 rootView
UIViewController 和 UINavigationBar
时遇到了难题。似乎 UINavigationController
可以用 rootViewController
启动:
let navController = UINavigationController(rootViewController: someViewController)
或者使用 UINavigatioBar,像这样:
let navController = UINavigationController(navigationBarClass: someUINavigationBar, toolbarClass: nil)
但是,我希望能够添加一个 rootViewController 以及一个自定义 UINavigationBar
。有什么办法吗?
我尝试将 UINavigationBar
设置为 navController.navigationController?.navigationBar = MyNavigationBar
然而, navigationController?.navigationBar 似乎只是一个 getter.
rootViewController
只是要显示的第一个视图控制器。虽然它似乎无法从任何地方访问,但您可以将 viewControllers
堆栈 属性 设置为一个视图控制器,即您的根。
这是一个带有便捷初始化器的扩展。
extension UINavigationController {
convenience init(navigationBarClass: Swift.AnyClass?, toolbarClass: Swift.AnyClass?, rootViewController: UIViewController) {
self.init(navigationBarClass: navigationBarClass, toolbarClass: toolbarClass)
self.viewControllers = [rootViewController]
}
}
为什么不在创建 navController
之后设置 rootViewController?
let navController = UINavigationController(navigationBarClass: someUINavigationBar, toolbarClass: nil)
navController.viewControllers = [someRootViewController]