127 lines
4.0 KiB
Swift
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
|
|
}
|
|
}
|