在iOS Swift中以编程方式创建UITabBar?

zzoitvuj  于 2022-10-31  发布在  Swift
关注(0)|答案(1)|浏览(141)

我正尝试以编程方式将唯一的viewControllers添加到TabBarItems,并使用IBOutlet创建UITabBar控制器。
这是我创建UITabBar的代码

public class TabBarViewController: UIViewController, UITabBarDelegate {

   @IBOutlet weak var tabBarCnt: UITabBar!

   override public func viewDidLoad() {
    super.viewDidLoad()
     self.tabBarCnt.delegate = self
     createTabBarController()
   }

   func createTabBarController() {

        let firstVC = FirstViewController()
        firstVC.name = nameVal
        firstVC.tabBarItem = UITabBarItem.init(title: nil, image: UIImage(named: "ico_active", in: Bundle(for: TabBarViewController.self), compatibleWith: nil), tag: 0)
        firstVC.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0);

        let secondVC = SecondViewController()
        firstVC.name = nameVal
        firstVC.tabBarItem = UITabBarItem.init(title: nil, image: UIImage(named: "ico_active", in: Bundle(for: TabBarViewController.self), compatibleWith: nil), tag: 0)
        firstVC.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0);

        let thirdVC = ThirdViewController()
        thirdVC.name = nameVal
        thirdVC.tabBarItem = UITabBarItem.init(title: nil, image: UIImage(named: "ico_active", in: Bundle(for: TabBarViewController.self), compatibleWith: nil), tag: 0)
        thirdVC.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0);

        tabBarCnt.items = [firstVC, secondVC, thirdVC]
        self.view.bringSubviewToFront(tabBarCnt)
    }

}

它不显示任何视图控制器。
如何基于我的代码创建UITabBar?

nfs0ujit

nfs0ujit1#

UITabBar不显示任何视图控制器。它只显示选项卡。
最有可能的情况是,您应该使用UITabBarController,而不是独立的UITabBar。更改您的TabBarViewController类,以扩展UITabBarController而不是UIViewController,并删除UITabBar插座。

public class TabBarViewController: UITabBarController {
    override public func viewDidLoad() {
        super.viewDidLoad()

        setupViewControllers()
    }

    func setupViewControllers() {
        let firstVC = FirstViewController()
        firstVC.name = nameVal
        firstVC.tabBarItem.image = UIImage(named: "ico_active", in: Bundle(for: TabBarViewController.self), compatibleWith: nil)
        firstVC.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0);

        let secondVC = SecondViewController()
        firstVC.name = nameVal
        firstVC.tabBarItem.image = UIImage(named: "ico_active", in: Bundle(for: TabBarViewController.self), compatibleWith: nil)
        firstVC.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0);

        let thirdVC = ThirdViewController()
        thirdVC.name = nameVal
        thirdVC.tabBarItem.image = UIImage(named: "ico_active", in: Bundle(for: TabBarViewController.self), compatibleWith: nil)
        thirdVC.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0);

        viewControllers = [firstVC, secondVC, thirdVC]
    }
}

请注意,您不需要为每个视图控制器创建新的UITabBarItem示例。
你也可以添加一个扩展到你的视图控制器来处理标签栏控制器的委托方法。

extension TabBarViewController: UITabBarControllerDelegate {
    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
        // Handle the user selecting a different tab
    }
}

相关问题