// // SPSearchViewController.swift // Thimra // // Created by 曾觉新 on 2025/4/17. // import UIKit class SPSearchViewController: SPViewController { private lazy var viewModel: SPSearchViewModel = SPSearchViewModel() //MARK: UI属性 private lazy var backButton: UIButton = { let button = UIButton(type: .custom) button.setImage(UIImage(named: "arrow_left_icon_01"), for: .normal) button.addTarget(self, action: #selector(handleBack), for: .touchUpInside) return button }() private lazy var searchInputView: SPSearchInputView = { let view = SPSearchInputView() view.textField.delegate = self view.textDidChange = { [weak self] text in self?.textDidChange(text: text) } return view }() ///搜索首页 private lazy var homeView: SPSearchHomeView = { let view = SPSearchHomeView() view.viewModel = self.viewModel view.searchTextBlock = { [weak self] text in self?.searchInputView.textField.text = text self?.textDidChange(text: text) } return view }() ///联想页面 private lazy var associativeView: SPSearchAssociativeView = { let view = SPSearchAssociativeView() view.viewModel = self.viewModel view.isHidden = true return view }() ///搜索结果 private lazy var resultView: SPSearchResultView = { let view = SPSearchResultView() view.isHidden = true return view }() override func viewDidLoad() { super.viewDidLoad() searchInputView.textField.becomeFirstResponder() _setupUI() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.setNavigationBarHidden(true, animated: true) } } extension SPSearchViewController { private func _setupUI() { view.addSubview(backButton) view.addSubview(searchInputView) view.addSubview(homeView) view.addSubview(resultView) view.addSubview(associativeView) backButton.snp.makeConstraints { make in make.left.equalToSuperview().offset(5) make.centerY.equalTo(searchInputView) make.width.height.equalTo(37) } searchInputView.snp.makeConstraints { make in make.right.equalToSuperview().offset(-15) make.top.equalToSuperview().offset(kSPStatusbarHeight + 10) make.left.equalTo(backButton.snp.right).offset(5) } homeView.snp.makeConstraints { make in make.left.right.bottom.equalToSuperview() make.top.equalTo(searchInputView.snp.bottom).offset(10) } resultView.snp.makeConstraints { make in make.edges.equalTo(homeView) } associativeView.snp.makeConstraints { make in make.edges.equalTo(homeView) } } } //MARK: -------------- UITextFieldDelegate -------------- extension SPSearchViewController: UITextFieldDelegate { func textFieldDidBeginEditing(_ textField: UITextField) { spLog(message: "开始编辑") } func textFieldDidEndEditing(_ textField: UITextField, reason: UITextField.DidEndEditingReason) { spLog(message: "结束编辑") } func textFieldShouldReturn(_ textField: UITextField) -> Bool { spLog(message: "点击搜索") if let text = textField.text, text.count > 0 { // self.requestSearch(text: text) } return true } ///文本发生变化 func textDidChange(text: String) { if text.count > 0 { self.associativeView.isHidden = false self.homeView.isHidden = true } else { self.associativeView.isHidden = true self.homeView.isHidden = false } self.associativeView.search(text: text) } } extension SPSearchViewController { }