MoviaBox/Thimra/Class/MyList/Controller/SPMyListViewController.swift
2025-04-24 11:14:21 +08:00

218 lines
7.4 KiB
Swift

//
// 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(set) 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
}
}
}