MoviaBox/Thimra/Class/Home/View/SPHomeSearchHistoryView.swift
2025-04-22 17:30:04 +08:00

130 lines
3.7 KiB
Swift

//
// SPHomeSearchHistoryView.swift
// Thimra
//
// Created by Overseas on 2025/4/22.
//
import UIKit
class SPHomeSearchHistoryView: UIView {
override var intrinsicContentSize: CGSize {
return CGSize(width: kSPScreenWidth, height: 30 + self.tagView.intrinsicContentSize.height)
}
var viewModel: SPSearchViewModel? {
didSet {
viewModel?.addObserver(self, forKeyPath: "searchHistoryArr", context: nil)
self.tagView.reloadData()
self.invalidateIntrinsicContentSize()
}
}
var searchTextBlock: ((_ text: String) -> Void)?
private lazy var titleLabel: UILabel = {
let label = UILabel()
label.font = .fontBold(ofSize: 16)
label.textColor = .colorE7F5FF()
label.text = "Historical search".localized
return label
}()
private lazy var deleteButton: UIButton = {
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "delete_icon_03"), for: .normal)
button.addTarget(self, action: #selector(handleDeleteButton), for: .touchUpInside)
return button
}()
private lazy var tagView: JXTagView = {
let view = JXTagView()
view.delegate = self
view.dataSource = self
view.tagBorderWidth = 1
view.tagBorderColor = .colorFFFFFF(alpha: 0.2)
view.tagHeight = 20
view.tagCornerRadius = 10
view.tagBackgroundColor = .clear
view.textFont = .fontRegular(ofSize: 12)
view.textColor = .colorFFFFFF(alpha: 0.8)
view.textMargin = 8
view.tagHorizontalGap = 12
view.tagVerticalGap = 12
view.leftAndRightMargin = 16
return view
}()
deinit {
viewModel?.removeObserver(self, forKeyPath: "searchHistoryArr")
}
override init(frame: CGRect) {
super.init(frame: frame)
_setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "searchHistoryArr" {
self.tagView.reloadData()
}
}
@objc private func handleDeleteButton() {
self.viewModel?.cleanSearchHistory()
}
}
extension SPHomeSearchHistoryView {
private func _setupUI() {
addSubview(titleLabel)
addSubview(deleteButton)
addSubview(tagView)
titleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(16)
make.centerY.equalTo(deleteButton)
}
deleteButton.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-16)
make.top.equalToSuperview()
}
tagView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.bottom.equalToSuperview()
// make.top.equalTo(self.titleLabel.snp.bottom).offset(12)
make.top.equalToSuperview().offset(30)
}
}
}
//MARK: -------------- JXTagViewDelegate & JXTagViewDataSource --------------
extension SPHomeSearchHistoryView: JXTagViewDelegate, JXTagViewDataSource {
func jx_tagView(tagView: JXTagView, titleForIndex index: Int) -> String? {
return viewModel?.searchHistoryArr[index]
}
func jx_number(in tagView: JXTagView) -> Int {
return viewModel?.searchHistoryArr.count ?? 0
}
func jx_tagView(tagView: JXTagView, didSelectedTagAt index: Int) {
guard let text = viewModel?.searchHistoryArr[index] else { return }
self.searchTextBlock?(text)
}
}