// // SPMyListViewController.swift // Thimra // // Created by 曾觉新 on 2025/4/18. // import UIKit class SPMyListViewController: SPViewController { private lazy var titles = ["Watch list".localized, "Recently viewed".localized] private lazy var viewControllers: [SPMyListChildViewController] = { let vc1 = SPCollectListViewController() vc1.allSelectedStateDidChange = { [weak self] isAllSelected in self?.allSelectedButton.isSelected = isAllSelected } let vc2 = SPPlayHistoryViewController() vc2.allSelectedStateDidChange = { [weak self] isAllSelected in self?.allSelectedButton.isSelected = isAllSelected } return [vc1, vc2] }() private lazy var sp_isEditing = false { didSet { editButton.isHidden = sp_isEditing pageView.segmentedView.isHidden = sp_isEditing cancelButton.isHidden = !sp_isEditing allSelectedButton.isHidden = !sp_isEditing pageView.pageContentScrollView.isScrollEnabled = !sp_isEditing let vc = viewControllers[pageView.selectedIndex] vc.sp_isEditing = sp_isEditing if !sp_isEditing { vc.setAllSelectedState(isSelected: false) allSelectedButton.isSelected = false } } } //MARK: UI属性 private lazy var pageView: JYPageController = { let pageView = JYPageController() pageView.delegate = self pageView.dataSource = self // pageView.config.indicatorWidth = 20 pageView.config.indicatorHeight = 2 pageView.config.indicatorCornerRadius = 0 pageView.config.indicatorColor = .colorFF0000() pageView.config.selectedTitleColor = .colorFFFFFF() pageView.config.selectedTitleFont = 16 pageView.config.selectedTitleFontWeight = .medium pageView.config.normalTitleColor = .colorA8A5AA() pageView.config.normalTitleFont = 16 pageView.config.normalTitleFontWeight = .medium pageView.config.leftPadding = 16 pageView.config.itemsMargin = 22 return pageView }() private lazy var editButton: UIButton = { let button = UIButton(type: .custom) button.setImage(UIImage(named: "delete_icon_01"), for: .normal) button.addTarget(self, action: #selector(handleEditButton), for: .touchUpInside) return button }() private lazy var cancelButton: UIButton = { let button = UIButton(type: .custom) // button.setTitle("Cancel".localized, for: .normal) button.setImage(UIImage(named: "cancel_icon_01"), for: .normal) // button.setTitleColor(.colorFFFFFF(alpha: 0.9), for: .normal) // button.titleLabel?.font = .fontRegular(ofSize: 15) button.addTarget(self, action: #selector(handleCancelButton), for: .touchUpInside) button.isHidden = true return button }() ///全选按钮 private lazy var allSelectedButton: UIButton = { let button = JXButton(type: .custom) button.setTitle("Select All".localized, for: .normal) button.setTitleColor(.colorFFFFFF(alpha: 0.9), for: .normal) button.setImage(UIImage(named: "check_icon_01"), for: .normal) button.setImage(UIImage(named: "check_icon_01_selected"), for: .selected) button.setImage(UIImage(named: "check_icon_01_selected"), for: [.selected, .highlighted]) button.jx_font = .fontRegular(ofSize: 15) button.titleDirection = .right button.space = 6 button.isHidden = true button.addTarget(self, action: #selector(handleAllSelectedButton), for: .touchUpInside) return button }() private lazy var lineView: UIView = { let view = UIView() view.backgroundColor = .color5A5C67() return view }() override func viewDidLoad() { super.viewDidLoad() _setupUI() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.setNavigationBarHidden(true, animated: true) } override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) if self.sp_isEditing { self.sp_isEditing = false } } @objc private func handleEditButton() { self.sp_isEditing = true } @objc private func handleCancelButton() { self.sp_isEditing = false } @objc private func handleAllSelectedButton() { let vc = viewControllers[pageView.selectedIndex] if self.allSelectedButton.isSelected { vc.setAllSelectedState(isSelected: false) } else { vc.setAllSelectedState(isSelected: true) } } } extension SPMyListViewController { private func _setupUI() { addChild(pageView) view.addSubview(lineView) view.addSubview(pageView.view) view.addSubview(editButton) view.addSubview(cancelButton) // view.addSubview(allSelectedButton) lineView.snp.makeConstraints { make in make.left.right.equalToSuperview() make.height.equalTo(1) make.top.equalToSuperview().offset(kSPStatusbarHeight + 10 + 34) } pageView.view.snp.makeConstraints { make in make.edges.equalToSuperview() } editButton.snp.makeConstraints { make in make.right.equalToSuperview().offset(-5) make.top.equalToSuperview().offset(kSPStatusbarHeight + 10) make.height.equalTo(35) make.width.equalTo(40) } cancelButton.snp.makeConstraints { make in make.edges.equalTo(editButton) // make.top.bottom.equalTo(editButton) // make.right.equalTo(editButton) } // allSelectedButton.snp.makeConstraints { make in // make.left.equalToSuperview().offset(15) // make.top.bottom.equalTo(editButton) // } } } //MARK: -------------- JYPageControllerDelegate & JYPageControllerDataSource -------------- extension SPMyListViewController: JYPageControllerDelegate, JYPageControllerDataSource { func pageController(_ pageController: JYPageController, frameForSegmentedView segmentedView: JYSegmentedView) -> CGRect { return .init(x: 0, y: kSPStatusbarHeight + 10, width: kSPScreenWidth, height: 35) } func pageController(_ pageController: JYPageController, frameForContainerView container: UIScrollView) -> CGRect { let y = kSPStatusbarHeight + 10 + 35 return .init(x: 0, y: kSPStatusbarHeight + 10 + 35, width: kSPScreenWidth, height: kSPScreenHeight - y - kSPTabBarHeight) } func pageController(_ pageController: JYPageController, titleAt index: Int) -> String { return titles[index] } func numberOfChildControllers() -> Int { return titles.count } func childController(atIndex index: Int) -> any JYPageChildContollerProtocol { return self.viewControllers[index] } func pageController(_ pageController: JYPageController, didEnterControllerAt index: Int) { if index == 0 { self.editButton.isHidden = false } else { self.editButton.isHidden = true } } }