我正在尝试以编程方式创建一个 UITabBarController
和一个 UINavigationController
。我试过很多教程,但大多数使用的是 Swift 3,它太过时而且不起作用。
AppDelegate.swift 片段:
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
window = UIWindow(frame: UIScreen.main.bounds)
let journalVC = JournalTableViewController()
let navController = UINavigationController(rootViewController: journalVC)
window?.rootViewController = navController
window?.makeKeyAndVisible()
return true
}
JournalTableViewController.swift 片段:
var tabBarCnt = UITabBarController()
override func viewDidLoad() {
super.viewDidLoad()
tabBarCnt = UITabBarController()
tabBarCnt.tabBar.barStyle = .black
let journalVC = JournalTableViewController()
journalVC.tabBarItem = UITabBarItem(tabBarSystemItem: .favorites, tag: 0)
tabBarCnt.viewControllers = [journalVC]
self.view.addSubview(tabBarCnt.view)
}
什么有效:
- 构建加载到模拟器上
什么不起作用:
加载到模拟器后构建崩溃
崩溃后,错误
Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffee6c2ada8)
出现在 JournalTableViewController.swift 的12
行片段
最佳答案
如果您要组合 UITabBarController
和 UINavigationController
,那么您需要将标签栏 Controller 作为 Root View Controller 。如果需要,每个选项卡都可以有自己的导航 Controller 。
如果您将导航 Controller 设置为根,那么只要您按下一个新的 View Controller ,标签栏就会消失。通过使选项卡栏成为根,您可以拥有一系列导航层次结构并使用选项卡按钮在它们之间快速切换。
AppDelegate.swift
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
window = UIWindow(frame: UIScreen.main.bounds)
let journalVC = JournalViewController()
let navController = UINavigationController(rootViewController: journalVC)
let tabBarController = UITabBarController()
navController.tabBarItem = UITabBarItem(tabBarSystemItem: .favorites, tag: 0)
tabBarController.viewControllers = [navController]
window?.rootViewController = tabBarController
window?.makeKeyAndVisible()
return true
}
您的 View Controller 类中不需要任何特定代码。
JournalTableViewController.swift 片段:
override func viewDidLoad() {
super.viewDidLoad()
}
关于ios - 以编程方式制作 UITabBarController 和 UINavigationController Swift 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53027275/