// // MeTraineeListViewController.swift // JiaPeiManage // // Created by Ning.ge on 2023/6/13. // import UIKit import RxSwift import RxCocoa enum TraineeType { case advancet //预报名 case official //正式 case biandstu //绑定 case none //普通-模式 } final class MeTraineeListViewController: BaseViewController { // MARK: 私有属性 private var menuTitles : [String] = ["科一", "科二", "科三", "科四", "毕业"] private var idxs: [UInt] = [] private var menuItemCurrentBtn : UIButton? var schoolId:Int = 0 var type:TraineeType? // MARK: UI let let statusBar = UIView().then { $0.backgroundColor = UIColor.db_theme } let navBar = MeTraineeNavBar.loadFromNib() let pageController = VTMagicController().then { $0.view.translatesAutoresizingMaskIntoConstraints = false $0.magicView.navigationColor = .db_theme_L2 $0.magicView.sliderColor = .db_sliderColor $0.magicView.switchStyle = .default $0.magicView.layoutStyle = .divide $0.magicView.navigationHeight = 57.f // $0.magicView.sliderExtension = -10 $0.magicView.sliderWidth = 22.f $0.magicView.sliderOffset = -8 $0.magicView.sliderHeight = 4 $0.magicView.isSeparatorHidden = false $0.magicView.bubbleRadius = 2 $0.magicView.needPreloading = true $0.magicView.separatorHeight = 0 //下划线h } var advancetTraineeSubjectPageViewController:MeTraineeSubjectPageViewController? override func setupConstraints() { statusBar.snp.makeConstraints { (make) in make.left.right.top.equalToSuperview() make.height.equalTo(Metric.statusBarHeight) } navBar.snp.remakeConstraints { (make) in make.left.right.equalToSuperview() make.height.equalTo(Metric.navBarHeight) make.top.equalTo(statusBar.snp.bottom) } pageController.view.snp.makeConstraints { (make) in make.left.right.bottom.equalToSuperview() make.top.equalTo(navBar.snp.bottom) } // if self.type != .advancet { // pageController.view.snp.makeConstraints { (make) in // make.left.right.bottom.equalToSuperview() // make.top.equalTo(navBar.snp.bottom) // } // }else { // advancetTraineeSubjectPageViewController?.view.snp.makeConstraints { (make) in // make.left.right.bottom.equalToSuperview() // make.top.equalTo(navBar.snp.bottom) // } // } } func scrollViewDidScroll(_ scrollView: UIScrollView) { } // MARK: StatusBar override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.setNavigationBarHidden(true, animated: true) } init(type:TraineeType) { self.type = type super.init() switch type { case .advancet: self.title = "预报名学员" self.tabBarItem.image = NYImage.TabBar.advancet self.tabBarItem.selectedImage = NYImage.TabBar.advancet_s?.withRenderingMode(.alwaysOriginal) menuTitles = ["预报名","科一", "科二", "科三", "科四", "毕业"] return case .official: self.navBar.title_label.text = "我的学员" //"我的学员-正式" self.title = "正式学员" self.tabBarItem.image = NYImage.TabBar.official self.tabBarItem.selectedImage = NYImage.TabBar.official_s?.withRenderingMode(.alwaysOriginal) return case .biandstu: self.navBar.title_label.text = "绑定学员" return case .none: return } } required convenience init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func viewDidLoad() { super.viewDidLoad() configureMagicController() setupUI() addNotificationCenter() } // MARK: 私有方法 func addNotificationCenter(){ NotificationCenter.default.addObserver(self, selector: #selector(setTagbadgeIntegerNotification), name: Notification.updateItemTopTotalNameNotification, object: nil) } func setupUI(){ if type == .advancet || type == TraineeType.none { self.navBar.title_label.text = (schoolId > 0 ?"在校学员":"我的学员") //"我的学员-预报名" } self.view.backgroundColor = .db_theme self.navBar.back_button.addTarget(self, action: #selector(actionBackdo), for: .touchUpInside) self.navBar.search_button.addTarget(self, action: #selector(jumpSearchdo), for: .touchUpInside) // self.navBar.search_button.rx.tap.subscribe ({ [unowned self] (_) in //// self.jumpSearch() // print("search_button=====%@",self) // NYSwRouter.push(NYSwPushType.trainee_search.path) // }).disposed(by: disposeBag) } func configureMagicController(){ self.view.addSubview(navBar) self.view.addSubview(statusBar) self.addChild(pageController) self.view.addSubview(pageController.view) //设置VTMagicController代理,初始页码 pageController.magicView.delegate = self pageController.magicView.dataSource = self pageController.magicView.reloadData(toPage: 0) // if self.type != .advancet { // self.addChild(pageController) // self.view.addSubview(pageController.view) // //设置VTMagicController代理,初始页码 // pageController.magicView.delegate = self // pageController.magicView.dataSource = self // pageController.magicView.reloadData(toPage: 0) // }else{ // //预报名 // advancetTraineeSubjectPageViewController = MeTraineeSubjectPageViewController(type: self.type!,state: "0",schoolId: schoolId) // self.addChild(advancetTraineeSubjectPageViewController!) // self.view.addSubview(advancetTraineeSubjectPageViewController!.view) // } } @objc func jumpSearchdo(_ sender: Any){ var context = 0 //我的 if type == .biandstu { context = 2 //绑定 }else { if schoolId > 0 { context = 1 //在校 } } NYSwRouter.push(NYSwPushType.trainee_search,context: context) } } //VTMagicViewDelegate view代理 extension MeTraineeListViewController : VTMagicViewDelegate { //设置 top 数字 @objc private func setTagbadgeIntegerNotification(_ notification: Notification) { let array:[Int] = notification.object as! [Int] let total = array[0] let itemIndex = array[1] var menuItem = pageController.magicView.menuItem(at: UInt(itemIndex)) menuItem?.qmui_badgeInteger = UInt(total) if total>999 { menuItem?.qmui_badgeOffset = CGPoint(x: -40, y: 26) } if pageController.currentPage != itemIndex{ menuItem?.qmui_badgeLabel?.isHidden = true } } //1 func magicView(_ magicView: VTMagicView, didSelectItemAt itemIndex: UInt) { // var menuItem = magicView.menuItem(at: itemIndex) // if (menuItemCurrentBtn != nil) { // menuItemCurrentBtn?.titleLabel?.font = NYFont.SysFont.sys_15 // menuItemCurrentBtn?.qmui_badgeLabel?.isHidden = true // } // menuItemCurrentBtn = menuItem // menuItem?.titleLabel?.font = UIFont.boldSystemFont(ofSize: 17) // menuItem?.qmui_badgeLabel?.isHidden = false // let pageVC = magicView.viewController(atPage: itemIndex) as! MeTraineeSubjectPageViewController // if pageVC != nil{ // menuItem?.qmui_badgeInteger = UInt(pageVC.traineeDataModel?.total ?? 0) // } guard let currentVc:MeTraineeSubjectPageViewController = pageController.currentViewController as? MeTraineeSubjectPageViewController else { return } if itemIndex == 0 || itemIndex == 1 { let currentPage = pageController.currentPage if currentPage == itemIndex { // TogetherDataManager.refreshDataForVTMagic(currentVc,true) } } } //3 func magicView(_ magicView: VTMagicView, viewDidAppear viewController: UIViewController, atPage pageIndex: UInt) { var menuItem = magicView.menuItem(at: pageIndex) if (menuItem != nil) { menuItemCurrentBtn = menuItem menuItem?.titleLabel?.font = UIFont.boldSystemFont(ofSize: 17) menuItem?.qmui_badgeLabel?.isHidden = false } if pageIndex == 0 || pageIndex == 1 { var canRefresh: Bool = false if let collectionVc = viewController as? BaseCollectionViewController { if collectionVc.totalItems() > 0 { canRefresh = true } } if idxs.contains(pageIndex) || canRefresh { // TogetherDataManager.refreshDataForVTMagic(viewController, false) } } } //2 func magicView(_ magicView: VTMagicView, viewDidDisappear viewController: UIViewController, atPage pageIndex: UInt) { var menuItem = magicView.menuItem(at: pageIndex) if (menuItem != nil) { menuItem?.titleLabel?.font = NYFont.SysFont.sys_15 menuItem?.qmui_badgeLabel?.isHidden = true } if pageIndex == 0 || pageIndex == 1 { if !idxs.contains(pageIndex) { idxs.append(pageIndex) } } if pageIndex == 1 { // TogetherDataManager.referenceDate = Date() } } } //VTMagicViewDataSource 数据源代理 extension MeTraineeListViewController : VTMagicViewDataSource{ func menuTitles(for magicView: VTMagicView) -> [String] { return menuTitles } func magicView(_ magicView: VTMagicView, menuItemAt itemIndex: UInt) -> UIButton { var menuItem = magicView.dequeueReusableItem(withIdentifier: "homeItemIdentifier") if menuItem == nil { menuItem = QMUIButton(type: .custom) menuItem?.setTitleColor(.db_fontGray, for: .normal) menuItem?.setTitleColor(.db_fontSelColor, for: .selected) menuItem?.titleLabel?.font = NYFont.SysFont.sys_15 if itemIndex==0 { menuItemCurrentBtn = menuItem menuItem?.titleLabel?.font = UIFont.boldSystemFont(ofSize: 17) } menuItem?.qmui_badgeBackgroundColor = UIColor("#F84444") menuItem?.qmui_badgeTextColor = UIColor.white // menuItem?.qmui_badgeInteger = 50 menuItem?.qmui_badgeLabel?.isHidden = true menuItem?.qmui_badgeFont = NYFont.SysFont.sys_10 if self.type != .advancet { menuItem?.qmui_badgeOffset = CGPoint(x: -35, y: 26) }else { menuItem?.qmui_badgeOffset = CGPoint(x: -25, y: 26) } menuItem?.qmui_badgeContentEdgeInsets = UIEdgeInsets(top: 2, left: 2, bottom: 2, right: 2) } return menuItem ?? UIButton() } func magicView(_ magicView: VTMagicView, viewControllerAtPage pageIndex: UInt) -> UIViewController { if self.type != .advancet { var meTraineeSubjectPageViewController = magicView.dequeueReusablePage(withIdentifier: "MeTraineeSubjectPageViewController0\(pageIndex)") if meTraineeSubjectPageViewController == nil { meTraineeSubjectPageViewController = MeTraineeSubjectPageViewController(type: self.type!,state: "\(pageIndex+1)",schoolId: schoolId) } return meTraineeSubjectPageViewController ?? UIViewController() }else{ var meTraineeSubjectPageViewController = magicView.dequeueReusablePage(withIdentifier: "MeTraineeSubjectPageViewController0\(pageIndex)") if meTraineeSubjectPageViewController == nil { meTraineeSubjectPageViewController = MeTraineeSubjectPageViewController(type: self.type!,state: "\(pageIndex)",schoolId: schoolId) } return meTraineeSubjectPageViewController ?? UIViewController() } } }