// // SPSearchHomeView.swift // Thimra // // Created by 曾觉新 on 2025/4/17. // import UIKit class SPSearchHomeView: UIView { var viewModel: SPSearchViewModel? { didSet { viewModel?.addObserver(self, forKeyPath: "searchHistoryArr", context: nil) historyView.viewModel = self.viewModel _updateUI() } } var searchTextBlock: ((_ text: String) -> Void)? //MARK: UI属性 private lazy var stackView: UIStackView = { let view = UIStackView() view.axis = .vertical view.spacing = 28 return view }() private lazy var historyView: SPHomeSearchHistoryView = { let view = SPHomeSearchHistoryView() view.searchTextBlock = { [weak self] text in self?.searchTextBlock?(text) } return view }() ///热门搜索 private lazy var hotSearchView: SPHomeHotSearchView = { let view = SPHomeHotSearchView() return view }() deinit { viewModel?.removeObserver(self, forKeyPath: "searchHistoryArr") } override init(frame: CGRect) { super.init(frame: frame) stackView.addArrangedSubview(historyView) _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" { _updateUI() } } } extension SPSearchHomeView { private func _setupUI() { addSubview(stackView) stackView.snp.makeConstraints { make in make.top.equalToSuperview().offset(10) make.left.right.bottom.equalToSuperview() // make.edges.equalToSuperview() } } private func _updateUI() { stackView.removeAllArrangedSubview() if (self.viewModel?.searchHistoryArr.count ?? 0) > 0 { self.stackView.addArrangedSubview(self.historyView) } self.stackView.addArrangedSubview(self.hotSearchView) } }