[英]How do I apply the coordinator pattern to the tabBar?
我想將協調器模式應用於標簽欄。
首先,我的AppCoordinator
class AppCoordinator: Coordinator {
let window: UIWindow?
var navigationController: UINavigationController
var childCoordinator: [Coordinator] = []
var parentCoordinator: Coordinator?
init(_ window: UIWindow?, navigationController: UINavigationController) {
self.window = window
self.navigationController = navigationController
window?.makeKeyAndVisible()
}
func start() {
var tabBarController = setTabBarController()
self.window?.rootViewController = tabBarController
}
func setTabBarController() -> UITabBarController {
let tabBar = UITabBarController()
let firstItem = UITabBarItem(title: nil, image: Image.mainImg, tag: 0)
let secondItem = UITabBarItem(title: nil, image: Image.searchImg, tag: 1)
let thirdItem = UITabBarItem(title: nil, image: Image.likePostImg, tag: 2)
let fourItem = UITabBarItem(title: nil, image: Image.profileImg, tag: 3)
let firstCoordinator = MainCoordinator(navigationController: navigationController)
firstCoordinator.parentCoordinator = self
childCoordinator.append(firstCoordinator)
let firstVC = firstCoordinator.startPush()
firstVC.tabBarItem = firstItem
let secondCoordinator = SearchCoordinator(navigationController: navigationController)
secondCoordinator.parentCoordinator = self
childCoordinator.append(secondCoordinator)
let secondVC = secondCoordinator.startPush()
secondVC.tabBarItem = secondItem
let thirdCoordinator = LikePostCoordinator(navigationController: navigationController)
thirdCoordinator.parentCoordinator = self
childCoordinator.append(thirdCoordinator)
let thirdVC = thirdCoordinator.startPush()
thirdVC.tabBarItem = thirdItem
tabBar.viewControllers = [firstVC, secondVC, thirdVC]
return tabBar
}
}
和我的MainCoordinator
class MainCoordinator: baseCoordinator {
func startPush() -> UINavigationController {
let MainVC = MainViewController(viewModel: .init(coordinator: self))
navigationController.setViewControllers([MainVC], animated: true)
return navigationController
}
}
searchVC 和 likePostVC 是一樣的。
但是,我的執行結果如下:
為了快速解釋,只顯示了似乎必要的代碼。 我想知道為什么我的執行結果是這樣的。 請幫我
我看到兩個問題:
weak
以防止保留循環我認為您的 tabBarController 需要一個協調器。 在該協調器的開始,您將您的子協調器添加到您的 tabBarCoordinator。
我總是在 tabBar 之前有登錄流程,在 AppCoordinator 啟動時我初始化登錄並將 appCoordinator.rootViewController 設置為 loginCoordinator.rootViewController。 這就是我在 tabBar 中使用協調器的方式:
class AppCoordinator() {
func start() {
// Mostly initializing login.
// somehow loginCoordinator triggers coordinatorDelegate.goToTabBar()
}
func goToTabBar() {
tabBarCoordinator = TabBarCoordinator(root: root, dependencies: dependencies)
tabBarCoordinator.coordinatorDelegate = self
tabBarCoordinator.start()
}
}
下面是我啟動 TabBarCoordinator 的方式:
class TabBarCoordinator {
func start() {
let tabBarController = TabBarController()
let firstCoordinator = //
children.append(firstCoordinator)]
firstCoordinator.start()
let controller1 = UIViewController()
controller1 = firstCoordinator.rootViewController
// Do the same for second..
tabBarController.viewControllers = [controller1, controller2]
rootViewController.show(tabBarController, sender: nil)
}
以下是如何初始化子協調器:
class FirstCoordinator {
func start() {
let firstVC = FirstViewController()
let navController = UINavigationController(rootViewController: firstVC)
rootViewController = navController
}
}
我試圖簡化代碼,它可能不是您正在尋找的直接答案,但我認為這將有助於理解模式。 }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.