Swift - UITabBarController, поскольку ChildViewController не работает - PullRequest
0 голосов
/ 27 ноября 2018

Мне нужно добавить 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)
    }

}

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Вот упрощенная версия добавления UITabBarController в качестве дочернего вида UIViewController. Я использую 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, вы можете создать несколько UIViewController и назначить их методу setViewControllers(_ viewControllers::[UIViewControllers]?, animated: Bool).Также установите свойства tintColor и unselectedItemTintColor и проверьте, работает ли у вас.Наконец Clean Build project и запустите, он должен работать на вас.

0 голосов
/ 27 ноября 2018

Если Tabbarvc подходит для всех приложений, я думаю, вы можете вызвать AppDelegate.Напишите этот код в didFinishLaunch в AppDelegate

window = UIWindow(frame: UIScreen.main.bounds)
            let storyboard = UIStoryboard(name: "TabBarStoryBoard", bundle: Bundle.main)
            let viewController = storyboard.instantiateInitialViewController()
            window?.rootViewController = viewController
            window?.makeKeyAndVisible()
            return true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...