|
|
@@ -23,7 +23,11 @@ class LNUserSearchViewController: LNViewController {
|
|
|
|
|
|
private let historyView = LNUserSearchHistoryView()
|
|
|
|
|
|
+ private let emptyView = LNNoMoreDataView()
|
|
|
private let tableView = UITableView()
|
|
|
+
|
|
|
+ private var curKeyword: String?
|
|
|
+ private var nextTag: String?
|
|
|
private var curList: [LNGameMateSearchResultVO] = []
|
|
|
|
|
|
override func viewDidLoad() {
|
|
|
@@ -35,18 +39,44 @@ class LNUserSearchViewController: LNViewController {
|
|
|
}
|
|
|
|
|
|
extension LNUserSearchViewController {
|
|
|
- private func searchUser(_ keyword: String) {
|
|
|
+ private func searchUser() {
|
|
|
+ guard let curKeyword, !curKeyword.isEmpty else {
|
|
|
+ tableView.mj_header?.endRefreshing()
|
|
|
+ tableView.mj_footer?.endRefreshingWithNoMoreData()
|
|
|
+ return
|
|
|
+ }
|
|
|
view.endEditing(true)
|
|
|
|
|
|
historyView.isHidden = true
|
|
|
- historyView.addRecord(keyword)
|
|
|
+ historyView.addRecord(curKeyword)
|
|
|
|
|
|
tableView.isHidden = false
|
|
|
- LNGameMateManager.shared.searchGameMate(keyword: keyword, next: "")
|
|
|
- { [weak self] list in
|
|
|
+ LNGameMateManager.shared.searchGameMate(keyword: curKeyword, next: nextTag ?? "")
|
|
|
+ { [weak self] list, next in
|
|
|
guard let self else { return }
|
|
|
+ guard let list else {
|
|
|
+ tableView.mj_header?.endRefreshing()
|
|
|
+ tableView.mj_footer?.endRefreshingWithNoMoreData()
|
|
|
+
|
|
|
+ if curList.isEmpty {
|
|
|
+ emptyView.showNetworkError()
|
|
|
+ }
|
|
|
+ return
|
|
|
+ }
|
|
|
curList = list
|
|
|
tableView.reloadData()
|
|
|
+ if list.isEmpty {
|
|
|
+ emptyView.showNoData(tips: .init(key: "暂无搜索结果"))
|
|
|
+ } else {
|
|
|
+ emptyView.hide()
|
|
|
+ }
|
|
|
+
|
|
|
+ self.tableView.mj_header?.endRefreshing()
|
|
|
+ if next?.isEmpty != false {
|
|
|
+ tableView.mj_footer?.endRefreshingWithNoMoreData()
|
|
|
+ } else {
|
|
|
+ tableView.mj_footer?.endRefreshing()
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -77,18 +107,20 @@ extension LNUserSearchViewController: UITableViewDataSource, UITableViewDelegate
|
|
|
extension LNUserSearchViewController: LNUserSearchHistoryViewDelegate {
|
|
|
func onUserSearchHistoryView(view: LNUserSearchHistoryView, didClick history: String) {
|
|
|
searchInput.text = history
|
|
|
+ curKeyword = history
|
|
|
|
|
|
- searchUser(history)
|
|
|
+ searchUser()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
extension LNUserSearchViewController: UITextFieldDelegate {
|
|
|
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
|
|
|
textField.resignFirstResponder()
|
|
|
-
|
|
|
guard let text = textField.text?.trimmingCharacters(in: .whitespacesAndNewlines),
|
|
|
!text.isEmpty else { return true }
|
|
|
- searchUser(text)
|
|
|
+
|
|
|
+ curKeyword = text
|
|
|
+ searchUser()
|
|
|
|
|
|
return true
|
|
|
}
|
|
|
@@ -161,11 +193,7 @@ extension LNUserSearchViewController {
|
|
|
search.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
|
|
|
search.addAction(UIAction(handler: { [weak self] _ in
|
|
|
guard let self else { return }
|
|
|
- guard let text = searchInput.text else { return }
|
|
|
- let fixed = text.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
|
- guard !fixed.isEmpty else { return }
|
|
|
-
|
|
|
- searchUser(fixed)
|
|
|
+ _ = textFieldShouldReturn(searchInput)
|
|
|
}), for: .touchUpInside)
|
|
|
container.addSubview(search)
|
|
|
search.snp.makeConstraints { make in
|
|
|
@@ -225,6 +253,21 @@ extension LNUserSearchViewController {
|
|
|
}
|
|
|
|
|
|
private func buildList() -> UIView {
|
|
|
+ let header = MJRefreshNormalHeader { [weak self] in
|
|
|
+ guard let self else { return }
|
|
|
+ nextTag = nil
|
|
|
+ searchUser()
|
|
|
+ }
|
|
|
+ header.lastUpdatedTimeLabel?.isHidden = true
|
|
|
+ header.stateLabel?.isHidden = true
|
|
|
+ tableView.mj_header = header
|
|
|
+
|
|
|
+ let footer = MJRefreshAutoNormalFooter { [weak self] in
|
|
|
+ guard let self else { return }
|
|
|
+ searchUser()
|
|
|
+ }
|
|
|
+ footer.setTitle("", for: .noMoreData)
|
|
|
+ tableView.mj_footer = footer
|
|
|
tableView.isHidden = true
|
|
|
tableView.dataSource = self
|
|
|
tableView.delegate = self
|
|
|
@@ -236,6 +279,12 @@ extension LNUserSearchViewController {
|
|
|
forCellReuseIdentifier: LNUserSearchItemCell.className
|
|
|
)
|
|
|
|
|
|
+ tableView.addSubview(emptyView)
|
|
|
+ emptyView.snp.makeConstraints { make in
|
|
|
+ make.centerX.equalToSuperview()
|
|
|
+ make.centerY.equalToSuperview().multipliedBy(0.6)
|
|
|
+ }
|
|
|
+
|
|
|
return tableView
|
|
|
}
|
|
|
|
|
|
@@ -250,6 +299,7 @@ extension LNUserSearchViewController {
|
|
|
#if DEBUG
|
|
|
|
|
|
import SwiftUI
|
|
|
+import MJRefresh
|
|
|
|
|
|
struct LNIMSearchViewControllerPreview: UIViewControllerRepresentable {
|
|
|
func makeUIViewController(context: Context) -> some UIViewController {
|