Fableon/Fableon/Object/Class/Me/C/FAMeViewController.swift
2025-10-29 10:26:27 +08:00

118 lines
3.1 KiB
Swift

//
// FAMeViewController.swift
// Fableon
//
// Created by on 2025/9/29.
//
import UIKit
import YYText
import JXSegmentedView
import JXPagingView
class FAMeViewController: FAViewController {
private lazy var headerView: FAMeHeaderView = {
let view = FAMeHeaderView()
view.userInfo = FALogin.manager.userInfo
return view
}()
private lazy var listView: FAMeListViewController = FAMeListViewController()
private lazy var segmentedView: JXSegmentedView = {
let view = JXSegmentedView()
return view
}()
private lazy var pagingView: JXPagingView = {
let view = JXPagingView(delegate: self)
view.mainTableView.backgroundColor = .clear
view.listContainerView.backgroundColor = .clear
view.listContainerView.listCellBackgroundColor = .clear
view.mainTableView.fa_addRefreshHeader(insetTop: 0) { [weak self] in
self?.handleHeaderRefresh(nil)
}
return view
}()
deinit {
NotificationCenter.default.removeObserver(self)
}
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(userInfoUpdateNotification), name: FALogin.userInfoUpdateNotification, object: nil)
fa_setupLayout()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.setNavigationBarHidden(true, animated: true)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
FALogin.manager.requestUserInfo(completer: nil)
}
override func handleHeaderRefresh(_ completer: (() -> Void)?) {
FALogin.manager.requestUserInfo { [weak self] in
self?.pagingView.mainTableView.fa_endHeaderRefreshing()
}
}
@objc private func userInfoUpdateNotification() {
headerView.userInfo = FALogin.manager.userInfo
}
}
extension FAMeViewController {
private func fa_setupLayout() {
view.addSubview(pagingView)
pagingView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.top.equalToSuperview().offset(UIScreen.safeTop)
}
}
}
//MARK: JXPagingViewDelegate
extension FAMeViewController: JXPagingViewDelegate {
func pagingView(_ pagingView: JXPagingView, initListAtIndex index: Int) -> any JXPagingViewListViewDelegate {
return listView
}
func tableHeaderViewHeight(in pagingView: JXPagingView) -> Int {
return Int(ceil(headerView.contentHeight))
}
func tableHeaderView(in pagingView: JXPagingView) -> UIView {
return headerView
}
func heightForPinSectionHeader(in pagingView: JXPagingView) -> Int {
return 0
}
func viewForPinSectionHeader(in pagingView: JXPagingView) -> UIView {
return UIView()
}
func numberOfLists(in pagingView: JXPagingView) -> Int {
return 1
}
}