首页 > 解决方案 > Swift - 作为 ChildViewController 的 UITabBarController 不起作用

问题描述

我需要将 UITabBarController 添加为 RootViewController 的子视图,但不能触摸 UITabBarController。

这是我的代码。我该如何解决?

func addSubviewToSelf(){
    var tabVC = TabBarVC()

    addChildViewController(tabVC)

    self.view.addSubview(tabVC.view)

    tabVC.didMove(toParentViewController: self)


    tabVC.view.snp.makeConstraints{ (make) in
        make.top.bottom.left.right.equalTo(self.view)
    }

}

标签: iosswiftuitabbarcontroller

解决方案


这是将 UITabBarController 添加为 UIViewController 的 childView 的简化版本,我使用 NSLayoutAnchor API 代替 SnapKit

import UIKit

class RootViewController: UIViewController {

    override func loadView() {
        view = UIView()
        view.backgroundColor = .white
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        addChildVC()
    }

    func addChildVC() {
        let tabBarVC = TabBarVC()
        addChild(tabBarVC)
        view.addSubview(tabBarVC.view)
        tabBarVC.view.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            tabBarVC.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            tabBarVC.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            tabBarVC.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
            tabBarVC.view.topAnchor.constraint(equalTo: view.topAnchor)
        ])
        tabBarVC.didMove(toParent: self)
    }
}

子类UITabBarController如下

class TabBarVC: UITabBarController, UITabBarControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        delegate = self
        // Do any additional setup after loading the view.
        configureTabBarItems()
    }

    func configureTabBarItems() {
        let vc1 = UIViewController()
        vc1.view.backgroundColor = .orange
        vc1.tabBarItem = UITabBarItem(tabBarSystemItem: .search, tag: 0)

        let vc2 = UIViewController()
        vc2.view.backgroundColor = .yellow
        vc2.tabBarItem = UITabBarItem(tabBarSystemItem: .bookmarks, tag: 1)

        let navigationController1 = UINavigationController(rootViewController: vc1)
        let navigationController2 = UINavigationController(rootViewController: vc2)
        setViewControllers([navigationController1, navigationController2], animated: false)

        tabBar.tintColor = .red
        tabBar.unselectedItemTintColor = .black
    }
}

由于您没有给出 UITabBarController 子类实现,您可以创建一些 UIViewControllers 并将其分配给setViewControllers(_ viewControllers::[UIViewControllers]?, animated: Bool)方法。还设置tintColorunselectedItemTintColor属性并检查是否适合您。最后清理构建项目并运行,它应该适合你。


推荐阅读