SWIFT: если я реализую панель UITAB программно, возможно ли редактировать различные TabItems внутри раскадровки

#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введите описание изображения здесь