SWIFT:如果我以编程方式实现UITAB栏,是否可以在storyBoard中编辑不同的tabItem

问题描述

我已经以编程方式实现了tabBar:

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"
    }
}

这是结果:

enter image description here

我的问题是: 是否必须以编程方式实现不同viewControllers downloadViewController,favoritesViewControllers的所有布局?
我不能使用情节提要板并关联viewController并在那里进行所有UI设计和实现,例如:

enter image description here

enter image description here

这里的问题是,如果我将以编程方式实现所有布局,那将不是显而易见的事情,也不是实际的事情。

并向该故事板ViewController分配DownloadsViewController时,当我导航到UITabBar中的DownloadsTab时,它不会显示出来。

解决方法

是的,您当前可以通过编程方式来创建视图控制器实例,而不必像这样从StoryBoard加载/获取viewController实例。

UIStoryboard(name: "Main",bundle: Bundle.main).instantiateViewController(identifier: "downloadsVC") as! DownloadsViewController

在调用此方法之前,请先设置viewController StoryboardID enter image description here