Я пытаюсь создать собственный TabBar. До сих пор мой подход заключался в создании одного UIViewController (назовем его TabBarController). В TabBarController я добавил childVC (назовем его UserViewController).

Я не мог найти способ изменить UserViewController без исчезновения TabBarController.

Я начал думать, что, возможно, это не очень хороший вариант, и что есть лучший, действительно работающий способ сделать это. Все, чего я действительно пытаюсь достичь, это TabBarController, отделенный от UserViewController, TabBarController всегда будет отображаться в нижней части экрана, и, щелкая элементы в нем, UserViewController изменится соответствующим образом.

Я искал часами, пробовал разные решения, ничего не получалось. Очень надеюсь, что вы могли бы направить меня, может быть, поделиться учебником или статьей, которая у вас есть об этом.

0
John Doah 4 Янв 2020 в 22:45
Как насчет контроллеров представлений контейнеров и встроенных переходов? Это сработает для вас?
 – 
Pierce
4 Янв 2020 в 22:57
Я бы с удовольствием попробовал это. Не могли бы вы поделиться некоторыми ресурсами об этом? Я никогда не использовал это.
 – 
John Doah
4 Янв 2020 в 22:59
Проверьте это, это довольно информативно: useyourloaf.com/blog/container-view-controllers
 – 
Pierce
4 Янв 2020 в 23:00

1 ответ

Создайте подкласс UITabBarViewController.

 class TabBarController: UITabBarController {

    var previousTabIndex: Int?

    override func viewDidLoad() {
        super.viewDidLoad()

        let viewControllerOne = ViewController()
        viewControllerOne.tabBarItem.image =  UIImage(named: "one")
        viewControllerOne.tabBarItem.title = "One"

        let viewControllerTwo = ViewController()
        viewControllerTwo.tabBarItem.image =  UIImage(named: "two")
        viewControllerTwo.tabBarItem.title = "Two"

        let viewControllerThree = ViewController()
        viewControllerThree.tabBarItem.title = "Premium"
        viewControllerThree.tabBarItem.image =  UIImage(named: "three")

        let tabBarList = [
            viewControllerOne,
            viewControllerTwo,
            viewControllerThree
        ]

        self.viewControllers = tabBarList.map {
            let nav = UINavigationController(rootViewController: $0)
            return nav
        }
    }
}

А затем в SceneDelegate установите window.rootViewController = TabBarController()

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = TabBarController()
        self.window = window
        window.makeKeyAndVisible()
    }
}

Если вы создали свой проект в более старой версии xCode, назначьте TabBarController() для window.rootController в didFinishLaunchingWithOptions из AppDelegate

0
mahan 4 Янв 2020 в 23:44