189 lines
7.0 KiB
Swift
189 lines
7.0 KiB
Swift
//
|
|
// MPPositive_SearchResultsShowView.swift
|
|
// MusicPlayer
|
|
//
|
|
// Created by Mr.Zhou on 2024/5/13.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class MPPositive_SearchResultsShowView: UIView {
|
|
///搜索结果管理模型
|
|
var loadModel:MPPositive_SearchResultsLoadViewModel!{
|
|
didSet{
|
|
DispatchQueue.main.async {
|
|
[weak self] in
|
|
guard let self = self else {return}
|
|
if loadModel == nil {
|
|
emptyImageView.isHidden = false
|
|
}else {
|
|
MP_AnalyticsManager.shared.search_result_pvAction()
|
|
loadModel.resultReloadBlock = {
|
|
[weak self] in
|
|
//刷新分页控制器
|
|
guard let self = self else {return}
|
|
MP_HUD.hideNow()
|
|
isHidden = false
|
|
MP_AnalyticsManager.shared.search_resultsuccess_actionAction()
|
|
dataSource.titles = loadModel?.sectionLists.compactMap({$0.title}) ?? []
|
|
dataSource.reloadData(selectedIndex: 0)
|
|
segmentView.reloadData()
|
|
emptyImageView.isHidden = !(dataSource.titles.count == 0)
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//MARK: - 分页栏设置
|
|
//分页栏View
|
|
private lazy var segmentView:JXSegmentedView = {
|
|
var jxSegmentView = JXSegmentedView()
|
|
jxSegmentView.backgroundColor = .init(hex: "1A1A1A")
|
|
return jxSegmentView
|
|
}()
|
|
//数据源
|
|
private lazy var dataSource:JXSegmentedTitleDataSource = {
|
|
var dataSource = JXSegmentedTitleDataSource()
|
|
//标题未选中状态
|
|
dataSource.titleNormalColor = .init(hex: "#666666")
|
|
dataSource.titleNormalFont = .systemFont(ofSize: 16*width, weight: .regular)
|
|
//标题选中状态
|
|
dataSource.titleSelectedColor = .init(hex: "#80F988")
|
|
dataSource.titleSelectedFont = .systemFont(ofSize: 16*width, weight: .bold)
|
|
//是否颜色过度
|
|
dataSource.isTitleColorGradientEnabled = true
|
|
dataSource.isSelectedAnimable = true
|
|
dataSource.isItemTransitionEnabled = true
|
|
return dataSource
|
|
}()
|
|
//指示器
|
|
private lazy var indicator:JXSegmentedIndicatorLineView = {
|
|
let indicator = JXSegmentedIndicatorLineView()
|
|
indicator.indicatorWidth = 16*width
|
|
indicator.indicatorHeight = 3*width
|
|
indicator.indicatorCornerRadius = 1.5*width
|
|
indicator.indicatorColor = .init(hex: "#80F988")
|
|
indicator.indicatorPosition = .bottom
|
|
return indicator
|
|
}()
|
|
//分页内容承载框
|
|
fileprivate lazy var listContainerView:JXSegmentedListContainerView = {
|
|
let listContainerView = JXSegmentedListContainerView(dataSource: self)
|
|
listContainerView.backgroundColor = .clear
|
|
return listContainerView
|
|
}()
|
|
//数据空图片
|
|
lazy var emptyImageView:UIImageView = {
|
|
let imageView = UIImageView(image: UIImage(named: "empty"))
|
|
imageView.contentMode = .scaleAspectFill
|
|
return imageView
|
|
}()
|
|
var scrollBlock:(() -> Void)?
|
|
//选中内容
|
|
var chooseItemBlock:((MPPositive_SearchResultItemViewModel) -> Void)?
|
|
var moreBlock:((MPPositive_SearchResultItemViewModel) -> Void)?
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
backgroundColor = .init(hex: "1A1A1A")
|
|
configure()
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
super.init(coder: coder)
|
|
}
|
|
//配置
|
|
private func configure() {
|
|
addSubview(emptyImageView)
|
|
emptyImageView.snp.makeConstraints { make in
|
|
make.center.equalToSuperview()
|
|
make.width.equalTo(211*width)
|
|
make.height.equalTo(172*width)
|
|
}
|
|
segmentView.indicators = [indicator]
|
|
segmentView.dataSource = dataSource
|
|
//配置View
|
|
addSubview(segmentView)
|
|
segmentView.snp.makeConstraints { make in
|
|
make.left.right.equalToSuperview()
|
|
make.top.equalToSuperview()
|
|
make.height.equalTo(60*width)
|
|
}
|
|
addSubview(listContainerView)
|
|
listContainerView.snp.makeConstraints { (make) in
|
|
make.left.right.bottom.equalToSuperview().priority(999)
|
|
make.top.equalTo(segmentView.snp.bottom).priority(999)
|
|
}
|
|
segmentView.contentScrollView = listContainerView.scrollView
|
|
segmentView.listContainer = listContainerView
|
|
}
|
|
}
|
|
//MARK: - JXSegmentedTitleDataSource
|
|
extension MPPositive_SearchResultsShowView: JXSegmentedListContainerViewDataSource, JXSegmentedViewDelegate {
|
|
func numberOfLists(in listContainerView: JXSegmentedListContainerView) -> Int {
|
|
return dataSource.titles.count
|
|
}
|
|
func listContainerView(_ listContainerView: JXSegmentedListContainerView, initListAt index: Int) -> JXSegmentedListContainerViewListDelegate {
|
|
if index == 0 {
|
|
//展示预览结果
|
|
let showView:MPPositive_SearchResultPreviewShowView = .init(frame: listContainerView.frame, sectionLists: loadModel.sectionLists)
|
|
showView.scrollBlock = {
|
|
[weak self] in
|
|
if self?.scrollBlock != nil {
|
|
self?.scrollBlock!()
|
|
}
|
|
}
|
|
showView.chooseMoreIndexBlock = {
|
|
[weak self] (selectedIndex) in
|
|
guard let self = self else {
|
|
return
|
|
}
|
|
segmentView.selectItemAt(index: selectedIndex)
|
|
}
|
|
showView.chooseItemBlock = {
|
|
[weak self] item in
|
|
guard let self = self else {
|
|
return
|
|
}
|
|
if chooseItemBlock != nil {
|
|
chooseItemBlock!(item)
|
|
}
|
|
}
|
|
showView.moreBlock = {
|
|
[weak self] (itemView) in
|
|
guard let self = self else {return}
|
|
if moreBlock != nil {
|
|
moreBlock!(itemView)
|
|
}
|
|
}
|
|
return showView
|
|
}else {
|
|
//展示分类结果
|
|
let showView:MPPositive_SearchResultTypeShowView = .init(frame: listContainerView.frame, list: loadModel.sectionLists[index])
|
|
showView.scrollBlock = {
|
|
[weak self] in
|
|
if self?.scrollBlock != nil {
|
|
self?.scrollBlock!()
|
|
}
|
|
}
|
|
showView.moreBlock = {
|
|
[weak self] (itemView) in
|
|
guard let self = self else {return}
|
|
if moreBlock != nil {
|
|
moreBlock!(itemView)
|
|
}
|
|
}
|
|
showView.chooseItemBlock = {
|
|
[weak self] item in
|
|
guard let self = self else {
|
|
return
|
|
}
|
|
if chooseItemBlock != nil {
|
|
chooseItemBlock!(item)
|
|
}
|
|
}
|
|
return showView
|
|
}
|
|
}
|
|
}
|