SynthReel/SynthReel/Class/Home/V/SRSearchHomeView.swift
2025-11-26 09:17:04 +08:00

99 lines
2.7 KiB
Swift

//
// SRSearchHomeView.swift
// SynthReel
//
// Created by on 2025/11/18.
// Copyright © 2025 SR. All rights reserved.
//
import UIKit
import SnapKit
class SRSearchHomeView: UIView {
var didSearch: ((_ text: String) -> Void)?
weak var viewModel: SRSearchViewModel? {
didSet {
viewModel?.addObserver(self, forKeyPath: "hotDataArr", context: nil)
viewModel?.addObserver(self, forKeyPath: "recordList", context: nil)
self.hotView.dataArr = self.viewModel?.hotDataArr ?? []
self.recordView.dataArr = self.viewModel?.recordList ?? []
DispatchQueue.main.async {
self.updateLayout()
}
}
}
lazy var stackView: UIStackView = {
let view = UIStackView()
view.spacing = 20
view.axis = .vertical
return view
}()
lazy var recordView: SRSearchRecordView = {
let view = SRSearchRecordView()
view.didSearch = { [weak self] text in
self?.didSearch?(text)
}
view.didDeleteAll = { [weak self] in
self?.viewModel?.clearSearchRecord()
}
return view
}()
lazy var hotView: SRHotSearchView = {
let view = SRHotSearchView()
return view
}()
deinit {
viewModel?.removeObserver(self, forKeyPath: "hotDataArr")
viewModel?.removeObserver(self, forKeyPath: "recordList")
}
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(stackView)
stackView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalToSuperview().offset(14)
make.bottom.lessThanOrEqualToSuperview()
}
}
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 == "hotDataArr" {
self.hotView.dataArr = self.viewModel?.hotDataArr ?? []
} else if keyPath == "recordList" {
self.recordView.dataArr = self.viewModel?.recordList ?? []
}
DispatchQueue.main.async {
self.updateLayout()
}
}
func updateLayout() {
stackView.sr_removeAllArrangedSubview()
if self.recordView.dataArr.count > 0 {
stackView.addArrangedSubview(recordView)
}
if self.hotView.dataArr.count > 0 {
stackView.addArrangedSubview(self.hotView)
}
}
}