Помощь с UITabBarController: при переходах по TabBarItem'ам не меняются экраны


#1

Здравствуйте!
Делаю свою ToDo из трех экранов: список задач, удаленные таски и информация.
Все это управляется через TabBarController.

В AppDelegate:

        func application(_ application: UIApplication, didFinishLaunchingWithOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
                window = UIWindow(frame: UIScreen.main.bounds)
                window?.makeKeyAndVisible()
                window?.overrideUserInterfaceStyle = .light
                let mainTabBarVC = TabBarController()
                window?.rootViewController = mainTabBarVC
                return true
            }

Класс TabBarController:

        class TabBarController: UITabBarController {
            
            override func viewDidLoad() {
                super.viewDidLoad()
                createTabBarController()
            }
            
            func createTabBarController() {
                let tabBarController = UITabBarController()
                tabBarController.tabBar.tintColor = .systemPink

                let taskListVC = UINavigationController(rootViewController: TaskListViewController())
                taskListVC.title = "Task List"
                taskListVC.tabBarItem = UITabBarItem(title: "Task List", image: UIImage(systemName: "list.bullet.rectangle.portrait"), tag: 0)

                let deletedTaskVC = UINavigationController(rootViewController: DeletedTaskViewController())
                deletedTaskVC.title = "Deleted Tasks"
                deletedTaskVC.tabBarItem = UITabBarItem(title: "Deleted Tasks", image: UIImage(systemName: "delete.left"), tag: 1)

                let infoVC = UINavigationController(rootViewController: InfoViewController())
                infoVC.title = "Information"
                infoVC.tabBarItem = UITabBarItem(title: "Information", image: UIImage(systemName: "info.circle"), tag: 2)

                tabBarController.setViewControllers([taskListVC, deletedTaskVC, infoVC], animated: true)
                
                self.view.addSubview(tabBarController.view) 
            }
        }

Проблема в том, что TabBarItem’ы не реагируют на нажатия (не показывают экраны).
Т.е. после загрузки приложения на экране есть TaskList и TabBar. Можно кликать на иконки - они меняют свое состояние как будто переход по экранам происходит, но сам экран не меняется - перманентно висит TaskListViewController.
Файлы под все классы TaskListViewController, DeletedTaskViewController и InfoViewController есть.

Если класс TabBarController не выносить в отдельный файл, а реализовать его в AppDelegate, то код работает, все хорошо. Но мне хочется сделать именно отдельным файлом.

Подскажите, пожалуйста, в чем может быть проблема?

P.s. Я совсем только учусь и возможно не знаю какую-то очень очевидное и необходимое действие. Но после просмотра многих туториалов уже многое перепробовано, и просто руки опустились найти, что здесь не так.


#2

Вот это вот не нужно совсем


#3

Большое спасибо за подсказку!
Вынесла строчку из метода в класс - все заработало корректно :+1:


#4

Видимо не до конца я выразился правильно. Такой подход с созданием экземпляра вовсе не нужен. У вас класс уже наследуется от TabBarController, следовательно все его методы доступны в вашем классе.


#5

Да, точно, убрала и поправила.
Еще раз благодарю!