BeeReel/BeeReel/Base/Controller/BRTabBarController.swift
2025-07-22 19:59:14 +08:00

127 lines
4.0 KiB
Swift

//
// BRTabBarController.swift
// BeeReel
//
// Created by on 2025/6/24.
//
import UIKit
class BRTabBarController: UITabBarController {
private var ignoreNextSelection = false
override var selectedViewController: UIViewController? {
willSet {
guard let newValue = newValue else {
// if newValue == nil ...
return
}
guard !ignoreNextSelection else {
ignoreNextSelection = false
return
}
guard let tabBar = self.tabBar as? BRTabBar, let index = viewControllers?.firstIndex(of: newValue) else {
return
}
tabBar.select(itemAtIndex: index, animated: false)
}
}
override var selectedIndex: Int {
willSet {
guard let tabBar = self.tabBar as? BRTabBar else {
return
}
guard !ignoreNextSelection else {
ignoreNextSelection = false
return
}
tabBar.select(itemAtIndex: newValue, animated: false)
}
}
override func viewDidLoad() {
super.viewDidLoad()
let tabBar = BRTabBar()
tabBar.delegate = self
self.setValue(tabBar, forKey: "tabBar")
self.tabBar.isTranslucent = true
br_setup()
}
//MARK:-------------- --------------
override var childForStatusBarStyle: UIViewController? {
return self.selectedViewController
}
override var childForStatusBarHidden: UIViewController? {
return self.selectedViewController
}
}
extension BRTabBarController {
private func br_setup() {
let nav1 = createNavigationController(viewController: BRHomeViewController(), title: "首页".localized, image: UIImage(named: "tabbar_icon_01"), selectedImage: UIImage(named: "tabbar_icon_01_selected"))
let nav2 = createNavigationController(viewController: BRExploreViewController(), title: "推荐".localized, image: UIImage(named: "tabbar_icon_02"), selectedImage: UIImage(named: "tabbar_icon_02_selected"))
let nav3 = createNavigationController(viewController: BRFavoritesViewController(), title: "首页".localized, image: UIImage(named: "tabbar_icon_03"), selectedImage: UIImage(named: "tabbar_icon_03_selected"))
let nav4 = createNavigationController(viewController: BRMineViewController(), title: "首页".localized, image: UIImage(named: "tabbar_icon_04"), selectedImage: UIImage(named: "tabbar_icon_04_selected"))
viewControllers = [nav1, nav2, nav3, nav4]
}
private func createNavigationController(viewController: UIViewController, title: String?, image: UIImage?, selectedImage: UIImage?) -> UINavigationController {
let tabBarItem = BRTabBarItem()
tabBarItem.title = title
tabBarItem.image = image
tabBarItem.selectedImage = selectedImage
let nav = BRNavigationController(rootViewController: viewController)
nav.tabBarItem = tabBarItem
return nav
}
}
extension BRTabBarController {
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
guard let idx = tabBar.items?.firstIndex(of: item) else {
return;
}
if let vc = viewControllers?[idx] {
ignoreNextSelection = true
selectedIndex = idx
delegate?.tabBarController?(self, didSelect: vc)
}
}
override func tabBar(_ tabBar: UITabBar, willBeginCustomizing items: [UITabBarItem]) {
if let tabBar = tabBar as? BRTabBar {
tabBar.updateLayout()
}
}
override func tabBar(_ tabBar: UITabBar, didEndCustomizing items: [UITabBarItem], changed: Bool) {
if let tabBar = tabBar as? BRTabBar {
tabBar.updateLayout()
}
}
}
extension BRTabBarController {
func onHomePage() {
self.selectedIndex = 0
}
}