Visual_Novel_iOS/crush/Crush/Src/Modules/Discover/DiscoverRolesGridController...

238 lines
7.8 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// DiscoverRolesGridController.swift
// Crush
//
// Created by Leon on 2025/9/8.
//
import JXPagingView
import UIKit
class DiscoverRolesGridController: CLBaseGridController {
var viewModel: DiscoverHomeRolesViewModel!
var tagsChooseView = HorizontalScrollTagsView()
var selectTagCodes = [String]()
var allCatogryTab: Bool = false
// aiId
var loadedAiIds = [Int]()
// Flag
var refreshDatasWhenAppear:Bool = false
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
setupViews()
setupDatas()
setupEvents()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if refreshDatasWhenAppear{
collectionView.mj_header?.beginRefreshing()
refreshDatasWhenAppear = false
}
}
private func setupViews() {
if allCatogryTab{
collectionView.snp.remakeConstraints { make in
make.edges.equalToSuperview()
}
}else{
view.addSubview(tagsChooseView)
tagsChooseView.snp.makeConstraints { make in
make.top.leading.trailing.equalToSuperview()
make.height.equalTo(56)
}
collectionView.snp.remakeConstraints { make in
make.top.equalTo(tagsChooseView.snp.bottom)
make.leading.trailing.bottom.equalToSuperview()
}
}
navigationView.isHidden = true
collectionView.register(MeRootPageRollCell.self, forCellWithReuseIdentifier: "MeRootPageRollCell")
collectionView.register(UICollectionReusableView.self,
forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader,
withReuseIdentifier: "UICollectionReusableView")
let lr = CGFloat.lrs
let itemW = (UIScreen.width - lr * 2 - 16) * 0.5
let itemH = itemW * 260 / 165.0 + 112
layout.scrollDirection = .vertical
layout.minimumLineSpacing = 0
layout.minimumInteritemSpacing = 16
layout.sectionInset = .init(top: 12, left: lr, bottom: 24 + UIWindow.safeAreaBottom, right: lr)
layout.itemSize = .init(width: itemW, height: itemH)
layout.invalidateLayout()
addRefreshHeaderFooter()
}
private func setupDatas() {
// collectionView.mj_header?.beginRefreshing()
loadNewData()
if allCatogryTab == false{
var tagsName = [String]()
for per in viewModel.tags ?? [] {
let formatString = "#\(per.name)"
tagsName.append(formatString)
}
tagsChooseView.setTags(tagsName)
}
}
override func loadData() {
if page == 1{
loadedAiIds.removeAll()
}
viewModel.loadRoles(pn: page, codes: selectTagCodes, exList: loadedAiIds) { [weak self] status, roles in
self?.collectionView.mj_header?.endRefreshing()
self?.collectionView.mj_footer?.endRefreshing()
if status {
let array = roles ?? []
for per in array {
if let theId = per.aiId{
self?.loadedAiIds.append(theId)
}
}
if self?.page == 1 {
self?.collectionView.contentOffset = .zero
self?.datas = array
self?.collectionView.mj_footer?.resetNoMoreData()
// self?.view.setupEmpty(empty: array.count <= 0, msg: "")
if array.count > 0 {
self?.view.hideEmpty()
} else {
self?.view.showStartYEmpty(text: "暂无角色", startY: 96)
}
} else {
self?.datas.append(contentsOf: array)
if array.count <= 0 {
self?.collectionView.mj_footer?.endRefreshingWithNoMoreData()
}
}
self?.collectionView.reloadData()
}
}
}
private func setupEvents() {
tagsChooseView.selectionCallback = {[weak self] selectedTags, selectedIndices in
guard let `self` = self else {
return
}
print("选中的标签: \(selectedTags)")
print("选中的索引: \(selectedIndices)")
self.selectTagCodes.removeAll()
for (index, tag) in (self.viewModel.tags ?? []).enumerated() {
if selectedIndices.contains(index) {
if let code = tag.code {
self.selectTagCodes.append(code)
}
}
}
self.loadNewData()
}
}
// MARK: - Public
// func tryLoad(code: String) {
// if let tagCode = viewModel.selectTagCode, code == tagCode {
// return
// }
// viewModel.selectTagCode = code
// loadNewData()
// }
// MARK: - UICollectionView
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return datas.count
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MeRootPageRollCell", for: indexPath) as! MeRootPageRollCell
cell.cellType = .discoverList
if let data = datas[indexPath.item] as? AIRoleInfo {
cell.config(data: data)
}
return cell
}
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if let data = datas[indexPath.item] as? AIRoleInfo {
AppRouter.goChatVC(aiId: data.aiId)
}
}
// func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
// if kind == UICollectionView.elementKindSectionHeader {
// let header = collectionView.dequeueReusableSupplementaryView(
// ofKind: kind,
// withReuseIdentifier: "UICollectionReusableView",
// for: indexPath
// )
//
// if !allCatogryTab{
// if tagsChooseView.superview == nil || tagsChooseView.superview != header {
// tagsChooseView.removeFromSuperview()
// }
//
// header.addSubview(tagsChooseView)
// tagsChooseView.snp.makeConstraints { make in
// make.top.leading.trailing.equalToSuperview()
// make.bottom.equalToSuperview()
// }
// }
//
// return header
// }
// return UICollectionReusableView()
// }
//
// func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
// let height = allCatogryTab ? 0.0 : 56.0
// return CGSize(width: UIScreen.width, height: height)
// }
}
extension DiscoverRolesGridController {
}
extension DiscoverRolesGridController: JXPagingViewListViewDelegate {
func listView() -> UIView {
return view
}
func listScrollView() -> UIScrollView {
return collectionView
}
func listViewDidScrollCallback(callback: @escaping (UIScrollView) -> Void) {
listViewDidScrollCallback = callback
}
}