#ios #swift #uitabbarcontroller #uitabbar #tvos
#iOS #swift #uitabbarcontroller #uitabbar #tvos
Вопрос:
Я реализовал панель вкладок программно:
class ViewController: UIViewController {
let tabBarCnt = UITabBarController()
override func viewDidLoad() {
super.viewDidLoad()
tabBarCnt.tabBar.tintColor = UIColor.black
createTabBarController()
}
func createTabBarController() {
let firstVc = UIViewController()
let downloadViewController = DownloadsViewController()
downloadViewController.tabBarItem = UITabBarItem(tabBarSystemItem: .downloads, tag: 0)
let bookmarkViewController = BookmarksViewController()
bookmarkViewController.tabBarItem = UITabBarItem(tabBarSystemItem: .bookmarks, tag: 1)
let favoritesViewControllers = FavoritesViewController()
favoritesViewControllers.tabBarItem = UITabBarItem(tabBarSystemItem: .favorites, tag: 2)
// Adding navigationControllers
let controllerArray = [downloadViewController, bookmarkViewController, favoritesViewControllers]
// For somereason this made the word Home appear in first tab
tabBarCnt.viewControllers = controllerArray.map{ UINavigationController.init(rootViewController: $0)}
self.view.addSubview(tabBarCnt.view)
}
}
DownloadViewController.swift
class DownloadsViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.green
self.title = "Downloads"
}
}
МОЙ ВОПРОС: должен ли я программно реализовывать все макеты разных ViewControllers downloadViewController, bookmarkViewController, favoritesViewControllers
?
Не могу ли я использовать раскадровку и связать ViewController и выполнить весь дизайн пользовательского интерфейса и реализацию там следующим образом:
Проблема здесь в том, что если я буду программно реализовывать весь макет, это не будет очевидным или практичным решением.
И назначение DownloadsViewController этому storyboard ViewController не позволяет ему отображать его при переходе к DownloadsTab в UITabBar.
Ответ №1:
Да, вы можете сделать это в настоящее время, создавая экземпляр view controller программно, вместо этого вам нужно загрузить / получить экземпляр ViewController из раскадровки следующим образом.
UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(identifier: "downloadsVC") as! DownloadsViewController
перед вызовом этого метода установите ViewController StoryboardID