176 lines
5.9 KiB
Swift
Executable File
176 lines
5.9 KiB
Swift
Executable File
//
|
||
// TableViewController.swift
|
||
// Tabbar
|
||
//
|
||
// Created by lym on 2020/12/31.
|
||
//
|
||
|
||
import Alamofire
|
||
import UIKit
|
||
import Combine
|
||
class TabBarController: UITabBarController {
|
||
private var customTabBar = TabBar()
|
||
|
||
private var cancellables = Set<AnyCancellable>()
|
||
|
||
override func viewDidLoad() {
|
||
super.viewDidLoad()
|
||
view.backgroundColor = .c.cbd
|
||
configViewControllers()
|
||
setupEvent()
|
||
}
|
||
|
||
private func setupEvent() {
|
||
|
||
|
||
NotificationCenter.default.addObserver(self, selector: #selector(notiPresentSignInVc), name: AppNotificationName.presentSignInVc.notificationName, object: nil)
|
||
// NotificationCenter.default.addObserver(self, selector: #selector(unreadChanged), name: AppNotificationName.unreadCountChanged.notificationName, object: nil)
|
||
|
||
IMManager.shared.$chatTabAllUnreadCount.sink {[weak self] count in
|
||
guard let `self` = self else {
|
||
return
|
||
}
|
||
guard let chatItem = self.customTabBar.tabItems?[1] else { return }
|
||
chatItem.count = count
|
||
}.store(in: &cancellables)
|
||
}
|
||
|
||
deinit {
|
||
NotificationCenter.default.removeObserver(self)
|
||
print("♻️TabBarController")
|
||
}
|
||
}
|
||
|
||
extension TabBarController {
|
||
public func setSelected(index: TabBarItemIndex) {
|
||
customTabBar.setSelected(selected: true, index: index)
|
||
switch index {
|
||
case .home:
|
||
selectedIndex = 0
|
||
case .friend:
|
||
selectedIndex = 1
|
||
case .discover:
|
||
selectedIndex = 2
|
||
case .me:
|
||
selectedIndex = 3
|
||
case .add:
|
||
break
|
||
}
|
||
}
|
||
}
|
||
|
||
extension TabBarController {
|
||
private func configViewControllers() {
|
||
let home = CLNavigationController(rootViewController: HomePageRootController())
|
||
let friend = CLNavigationController(rootViewController: FriendsRootHomeController())
|
||
let discover = CLNavigationController(rootViewController: DiscoverRootPageController())
|
||
let me = CLNavigationController(rootViewController: MeRootPageController())
|
||
viewControllers = [home, friend, discover, me]
|
||
|
||
let homeItem = TitleItem(title: "1",
|
||
image: UIImage(named: "tabbar_foryou")!,
|
||
selectedImage: UIImage(named: "tabbar_foryou_selected")!,
|
||
itemIndex: .home)
|
||
homeItem.count = 0
|
||
|
||
let friendItem = TitleItem(title: "2",
|
||
image: UIImage(named: "tabbar_contact")!,
|
||
selectedImage: UIImage(named: "tabbar_contact_selected")!,
|
||
itemIndex: .friend)
|
||
friendItem.count = 0
|
||
|
||
let discoverItem = TitleItem(title: "3",
|
||
image: UIImage(named: "tabbar_explore")!,
|
||
selectedImage: UIImage(named: "tabbar_explore_selected")!,
|
||
itemIndex: .discover)
|
||
|
||
let meItem = TitleItem(title: "4",
|
||
image: UIImage(named: "tabbar_me")!,
|
||
selectedImage: UIImage(named: "tabbar_me_selected")!,
|
||
itemIndex: .me)
|
||
meItem.count = 0
|
||
|
||
let addItem = TitleItem(title: "+",
|
||
image: UIImage(named: "tabbar_create_app")!,
|
||
selectedImage: UIImage(named: "tabbar_create_app")!,
|
||
itemIndex: .add)
|
||
|
||
let childItem: [TabbarItem] = [homeItem, friendItem, addItem, discoverItem, meItem]
|
||
customTabBar.tabItems = childItem
|
||
customTabBar.tabBarDelegate = self
|
||
setValue(customTabBar, forKey: "tabBar")
|
||
}
|
||
|
||
// MARK: noti
|
||
|
||
@objc private func notiPresentSignInVc() {
|
||
if UserCore.shared.isLogin() {
|
||
return
|
||
}
|
||
|
||
if let vc = UIWindow.getTopViewController(), vc.isKind(of: CLLoginMainController.self) {
|
||
dlog("⚠️已弹出登录")
|
||
} else {
|
||
let vc = CLLoginMainController()
|
||
let navc = CLNavigationController(rootViewController: vc)
|
||
navc.modalPresentationStyle = .fullScreen
|
||
AppRouter.shared.isBlockBackRootVc = true
|
||
present(navc, animated: true) {
|
||
AppRouter.shared.isBlockBackRootVc = false
|
||
}
|
||
}
|
||
}
|
||
|
||
// @objc private func unreadChanged() {
|
||
// guard let chatItem = customTabBar.tabItems?[1] else { return }
|
||
// chatItem.count = IMManager.shared.chatTabAllUnreadCount
|
||
// }
|
||
}
|
||
|
||
// MARK: - TabBarDelegate
|
||
|
||
extension TabBarController: TabBarDelegate {
|
||
func tabBar(_: TabBar, didSelectItemAt index: TabBarItemIndex) {
|
||
switch index {
|
||
case .home:
|
||
#if DEBUG
|
||
if APIConfig.environment != .appStore && APIConfig.environment != .product{
|
||
if selectedIndex == 0 {
|
||
UIWindow.getTopViewController()?.navigationController?.pushViewController(TestEntrancesController(), animated: true)
|
||
}
|
||
}
|
||
#endif
|
||
selectedIndex = 0
|
||
case .friend:
|
||
selectedIndex = 1
|
||
case .discover:
|
||
selectedIndex = 2
|
||
case .me:
|
||
selectedIndex = 3
|
||
case .add:
|
||
break
|
||
//AppRouter.goCreateEditAIRole()
|
||
}
|
||
|
||
IMManager.shared.regetAllUnreadCount()
|
||
}
|
||
|
||
func tabBar(_: TabBar, canTapEnterItem index: TabBarItemIndex) -> Bool {
|
||
switch index {
|
||
case .me, .friend:
|
||
if UserCore.shared.checkUserLoginIfNotPushUserToLogin() {
|
||
return true
|
||
} else {
|
||
return false
|
||
}
|
||
case .add:
|
||
if UserCore.shared.checkUserLoginIfNotPushUserToLogin(){
|
||
AppRouter.goCreateEditAIRole()
|
||
}
|
||
return false
|
||
default:
|
||
return true
|
||
}
|
||
}
|
||
}
|