首页 > 解决方案 > SWIFT:如果我以编程方式实现 UITAB 栏,是否可以在 storyBoard 中编辑不同的 tabItems

问题描述

我以编程方式实现了一个 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)
    }
}

下载ViewController.swift

class DownloadsViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.green
        self.title = "Downloads"
    }
}

这是结果: 在此处输入图像描述

我的问题是: 我是否必须以编程方式实现不同视图控制器的所有布局downloadViewController, bookmarkViewController, favoritesViewControllers
我不能使用情节提要并关联一个 viewController 并在那里进行所有 UI 设计和实现,如下所示:
在此处输入图像描述

在此处输入图像描述

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

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

标签: iosswiftuitabbarcontrolleruitabbartvos

解决方案


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

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

在调用此方法之前设置 viewController StoryboardID在此处输入图像描述


推荐阅读