1

我正在使用带有协调器模式的 MVVM 进行导航。使用 pushViewController 进行导航。Tab Bar Controller 是在 TabBarCoordinator 类中创建的。

class TabBarCoordinator: NSObject, BaseCoordinator {
        
        
        var rootViewController: UIViewController {
            return tabBarController
        }
    
        var tabBarController: UITabBarController
        
        var window: UIWindow
        private let appDependency: AppDependency
        var navigationController: NavigationController
        private let navigationObserver: NavigationObserver
        
        var childCoordinators: [BaseCoordinator] = []
        
        var onDidFinish: (() -> Void)?
        
        var topController: UIViewController {
          if let lastChild = topCoordinator {
            return lastChild.topController
          }
          var controller: UIViewController = navigationController
          while let presentedController = controller.presentedViewController {
            controller = presentedController
          }
          return controller
        }
        
        func start() {
            
            let homeCoordinator = HomeCoordinator(navigationObserver: navigationObserver,
                                              navigationController: navigationController,
                                              appDependency: appDependency)
            add(child: homeCoordinator)
            homeCoordinator.start()
            
            let ordersListCoordinator = OrdersListCoordinator(navigationController: navigationController,
                                                           navigationObserver: navigationObserver,
                                                           appDependency: appDependency,
                                                           filterStatus: nil)
            add(child: ordersListCoordinator)
            ordersListCoordinator.start()
            
            tabBarController.navigationController?.navigationBar.isTranslucent = true
            
            let homeVC = homeCoordinator.topController
            homeVC.tabBarItem = UITabBarItem(title: "home", image: nil, selectedImage: nil)
            
            let ordersListVC = ordersListCoordinator.topController
            ordersListVC.tabBarItem = UITabBarItem(title: "orders", image: nil, selectedImage: nil)
            
            let controllers = [homeVC, ordersListVC]
            
            tabBarController.viewControllers = controllers.map { UINavigationController(rootViewController: $0) }
            
            window.rootViewController = tabBarController
            window.makeKeyAndVisible()
            
        }
        
        required init(window: UIWindow,
            navigationObserver: NavigationObserver,
             navigationController: NavigationController,
             appDependency: AppDependency
        ) {
            
            tabBarController = UITabBarController()
            self.window = window
          self.navigationController = navigationController
          self.navigationObserver = navigationObserver
          self.appDependency = appDependency
        }
    }

这里是func start()HomeCoordinator 类的代码:

func start() {
        guard let user = appDependency.userDataStore.authorizedUserInfo?.user else { return }
        let viewModel = HomeViewModel(user: user)
        viewModel.delegate = self
        let homeViewController = HomeViewController(viewModel: viewModel)
        viewController = homeViewController
        navigationController.viewControllers = [homeViewController]
    }

标签栏截图

标签栏的问题:

  • isTranslucent 不会从 TabbarController 隐藏 navBar
  • 屏幕是黑色的
  • tabBarItems 的视图没有显示,但你仍然可以点击它们,屏幕会改变
  • 第二个vc只是黑屏

任何想法我的 TabBarCoordinator 类有什么问题?先感谢您

4

0 回答 0