簡體   English   中英

如何在 UITabBarController 中實現協調器

[英]how can implement coordinator in UITabBarController

我有一個以編程方式創建的 UITabBarViewController 並且我已經導入了我所有的 3 個 UIViewControllers,現在我想將 Coordinator 添加到我的項目中,並且我想將 Coordinator 添加到我的所有 3 個 UIViewControllers 中。 我該如何使用它?

class MainTabbarViewController: UITabBarController, UITabBarControllerDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
        
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        // home Tab
        let homeStoryboard: UIStoryboard = UIStoryboard(name: "HomeStoryboard", bundle: nil)
        let homeTab = homeStoryboard.instantiateViewController(withIdentifier: "HomeViewController")
        let homeTabBarItem = UITabBarItem(title: "Home", image: UIImage(systemName: "house"), selectedImage: UIImage(systemName: "house.fill"))
        homeTab.tabBarItem = homeTabBarItem
        
        // search Tab
        let searchStoryboard: UIStoryboard = UIStoryboard(name: "SearchStoryboard", bundle: nil)
        let searchTab = searchStoryboard.instantiateViewController(withIdentifier: "SearchViewController")
        let searchTabBarItem = UITabBarItem(title: "Search", image: UIImage(systemName: "magnifyingglass"), selectedImage: UIImage(systemName: "magnifyingglass"))
        searchTab.tabBarItem = searchTabBarItem
        
        // profile Tab
        let profileStoryboard: UIStoryboard = UIStoryboard(name: "ProfileStoryboard", bundle: nil)
        let profileTab = profileStoryboard.instantiateViewController(withIdentifier: "ProfileViewController")
        let profileTabBarItem = UITabBarItem(title: "Profile", image: UIImage(systemName: "person"), selectedImage: UIImage(systemName: "person.fill"))
        profileTab.tabBarItem = profileTabBarItem
        profileTab.navigationController?.navigationBar.isHidden = true
        self.tabBar.tintColor = UIColor(asset: Asset.Colors.yellow)
        self.viewControllers = [homeTab, searchTab, profileTab]
    }
}

這是我的 UITabBarController

protocol Coordinator {
    var childCoordinators: [Coordinator] { get set }
    var navigationController: UINavigationController { get set }

    func start()
}

這是我的協調器協議。

此文件應刪除並添加其他文件。 我用這個代碼命名了 TabCoordinator:

final class TabCoordinator: NSObject, TabBarCoordinatorProtocol {
    // Root View Controller
    var rootViewController: UIViewController {
        return tabController
    }
    // Empty UITabBarController
    let tabController: UITabBarController
    
    // Tab Item Coordinators
    let homeCoordinator: HomeCoordinator
    let searchCoordinator: SearchCoordinator
    let profileCoordinator: ProfileCoordinator
    // Initialize
    
    override init() {
        tabController = UITabBarController()
        var controllers: [UIViewController] = []
        
        // Home Coordinator
        homeCoordinator = HomeCoordinator(navigationController: UINavigationController())
        let homeViewController = homeCoordinator.rootViewController
        homeViewController.tabBarItem = UITabBarItem(title: "Home", image: UIImage(systemName: "house"), selectedImage: UIImage(systemName: "house.fill"))
        homeCoordinator.start()
        
        // Search Coordinator
        searchCoordinator = SearchCoordinator(navigationController: UINavigationController())
        let searchViewController = searchCoordinator.rootViewController
        searchViewController.tabBarItem = UITabBarItem(title: "Search", image: UIImage(systemName: "magnifyingglass"), selectedImage: UIImage(systemName: "magnifyingglass"))
        searchCoordinator.start()
        
        // Profile Coordinator
        profileCoordinator = ProfileCoordinator(navigationController: UINavigationController())
        let profileViewController = profileCoordinator.rootViewController
        profileViewController.tabBarItem = UITabBarItem(title: "Profile", image: UIImage(systemName: "person"), selectedImage: UIImage(systemName: "person.fill"))
        profileCoordinator.start()
        super.init()
        
        controllers.append(homeViewController)
        controllers.append(searchViewController)
        controllers.append(profileViewController)
        tabController.viewControllers = controllers
        tabController.tabBar.tintColor = UIColor(asset: Asset.Colors.yellow)
        tabController.tabBar.isTranslucent = false
    }
}

和 TabBarCoordinatorProtocol 文件包含這些代碼

public protocol TabBarCoordinatorProtocol {
    var rootViewController: UIViewController { get }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM