99 lines
2.7 KiB
Swift
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)
|
|
}
|
|
|
|
}
|
|
|
|
}
|