【发布时间】:2020-01-21 18:12:40
【问题描述】:
updateSearchResults 函数由于某种原因没有在我的视图表控制器视图中被调用,我不知道为什么?我见过这个answer,但它与我的完全不同,我不想使用textDidChange 函数。
我有这个视图SearchViewController,它的顶部有一个搜索栏,下面有一个集合视图。 (制作 Instagram 探索页面)。一旦点击了搜索栏,它应该会显示视图SearchTableViewController,它会在表格视图中显示搜索查询的结果。
这是我的代码:
SearchViewController(主视图):
import UIKit
class SearchViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
guard let searchResultsViewController = storyboard.instantiateViewController(withIdentifier: "SearchResultsViewController") as? SearchTableViewController else { return}
let searchController = UISearchController(searchResultsController: searchResultsViewController)
searchController.searchResultsUpdater = searchResultsViewController
view.addSubview(searchController.searchBar)
definesPresentationContext = true
}
}
SearchTableViewController(与结果一起显示的视图):
import UIKit
import Firebase
class SearchTableViewController: UIViewController {
let languages = ["Mandarin Chinese", "English", "Hindustani", "Spanish", "Arabic", "Malay", "Russian", "Bengali", "Portuguese", "French", "Hausa", "Punjabi", "German", "Japanese", "Persian", "Swahili", "Telugu", "Javanese", "Wu Chinese", "Korean"]
var searchResults: [String] = []
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
}
}
extension SearchTableViewController: UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {
print("typing")
guard let searchText = searchController.searchBar.text else { return }
searchResults = languages.filter { $0.contains(searchText) }
tableView.reloadData()
}
}
extension SearchTableViewController: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return searchResults.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "searchCell", for: indexPath)
let language = searchResults[indexPath.row]
cell.textLabel?.text = language
return cell
}
}
extension SearchTableViewController: UISearchResultsUpdating 中的updateSearchResults 未被调用,我认为这是导致搜索结果未加载搜索查询数据的表视图的原因?
【问题讨论】:
-
您确定您的
searchController设置正确吗? -
@koen 正确的方法是什么?我认为这一切都很好,所以是的。
-
不要假设,不检查就不知道。我会通过
viewDidLoad看看searchController和searchResultsViewController是否被实例化。还有一个关于 Ray Wenderlich 的很好的教程,展示了所有需要的步骤。 -
@koen 我将如何检查它,你能指出我这个''教程'
-
首先,使用调试器或打印语句确保它们不为零。这是非常基本的东西。如果您只搜索
uisearchcontroller tutorial,您可以找到教程等等。
标签: ios swift uitableview uisearchcontroller