Контроллер TabBar с шаблоном координатора

Я следил за учебником Пола Хадсона о шаблоне координатора и дошел до случая, когда мне нужно использовать контроллер панели вкладок после представления контроллера панели вкладок, даже если у меня есть экземпляры контроллера навигации, которые я не могу переместить из одного места в другое. Другая. Заранее спасибо.

У меня есть главный координатор для запуска потока заявок.

      class MainCoordinator: Coordinator {

var childCoordinators = [Coordinator]()
var navigationController: UINavigationController

init(navigationController: UINavigationController) {
    self.navigationController = navigationController
}

func start() {
    let vc = ViewController.instantiate(storyboard: .main)
    vc.coordinator = self
    navigationController.pushViewController(vc, animated: false)
}
    
func navigateToCreateAccount(){
    let vc = CreateAccountVC.instantiate(storyboard: .main)
    vc.coordinator = self
    navigationController.pushViewController(vc, animated: true)
}

func navigateToBuySubscription(){
    let vc = BuySubscriptionVC.instantiate(storyboard: .main)
    vc.coordinator = self
    navigationController.pushViewController(vc, animated: true)
}


func navigateToTabBar(){
    let vc = TabBarCoordinator(navigationController: navigationController)
    childCoordinators.append(vc)
    vc.start(type: .LoginSession)
}

}

И у моего координатора панели вкладок есть индивидуальные координаторы для каждого раздела страницы, это мой координатор панели вкладок.

      class TabBarCoordinator: Coordinator {

var childCoordinators = [Coordinator]()
var navigationController: UINavigationController

init(navigationController: UINavigationController) {
    self.navigationController = navigationController
}

func start(type: NavigationType) {
    
    let vc = NewsFeedTBC.instantiate(storyboard: .newsfeed)
    
    //TODO: check the need of assigning this navigation controller
    
    vc.coordinator = self
    
    //TopRated VC Related
    let topRatedNavigationController = UINavigationController()
    topRatedNavigationController.tabBarItem = UITabBarItem(tabBarSystemItem: .topRated, tag: 0)
    let topRatedCoordinator = TopRatedCoordinator(navigationController: topRatedNavigationController)
    topRatedCoordinator.start()

    //Bookmarks VC Related
    let bookmarksNavigationController = UINavigationController()
    bookmarksNavigationController.tabBarItem = UITabBarItem(tabBarSystemItem: .bookmarks, tag: 1)
    let bookmarksCoordinator = BookmarksCoordinator(navigationController: bookmarksNavigationController)
    bookmarksCoordinator.start()
    
    //Downloads VC Related
    let downloadsNavigationController = UINavigationController()
    downloadsNavigationController.tabBarItem = UITabBarItem(tabBarSystemItem: .downloads, tag: 2)
    let downloadsCoordinator = DownloadsCoordinator(navigationController: downloadsNavigationController)
    downloadsCoordinator.start()
    
    vc.modalPresentationStyle = .fullScreen
    
    vc.viewControllers = [
        topRatedNavigationController,
        downloadsNavigationController,
        bookmarksNavigationController
    ]

    type == .LoginSession ? navigationController.present(vc, animated: true, completion: nil) : navigationController.pushViewController(vc, animated: true)
}

}

например, это вышеупомянутый индивидуальный координатор

      class BookmarksCoordinator: Coordinator {

var childCoordinators = [Coordinator]()
var navigationController: UINavigationController


init(navigationController: UINavigationController) {
    self.navigationController = navigationController
}

func start() {
    let vc = BookMarksVC.instantiate(storyboard: .newsfeed)
    vc.coordinator = self
    navigationController.pushViewController(vc, animated: true)
}

func navigateToProfile(){
    let vc = ProfileVC.instantiate(storyboard: .newsfeed)
    vc.coordinator = self
    navigationController.present(vc, animated: true, completion: nil)
}

}

Проблема возникает, когда я пытаюсь перейти от этих отдельных контроллеров.

1 ответ

Нашел проблему, которую искал.

      func start() {
    
    let vc = NewsFeedTabBarVC.instantiate(storyBoard: .NewsFeed)
    vc.coordinator = self
    vc.sideMenuDelegate = self
    
    //Home VC Related
    let homeNavigationController = UINavigationController()
    homeNavigationController.tabBarItem = UITabBarItem(title: nil, image: UIImage(named: "home"), tag: 0)
    let homeCoordinator = HomeNavigator(navigationController: homeNavigationController)
    childCoordinators.append(homeCoordinator)
    homeCoordinator.avatarDelegate = vc
    homeCoordinator.start()
    
    //Friends VC Related
    let friendsNavigationController = UINavigationController()
    friendsNavigationController.tabBarItem = UITabBarItem(title: nil, image: UIImage(named: "users"), tag: 1)
    let friendsCoordinator = FriendsNavigator(navigationController: friendsNavigationController)
    childCoordinators.append(friendsCoordinator)
    
    friendsCoordinator.start()
}
Другие вопросы по тегам