触摸搜索栏时未调用 updateSearchResults 函数
updateSearchResults function is not being called when searchBar is touched
出于某种原因,updateSearchResults
函数在我的视图 table 控制器视图中没有被调用,我不知道为什么?我看过这个 answer,但它与我的完全不同,我不想使用 textDidChange
函数。
我有这个视图 SearchViewController
,它的顶部有一个搜索栏,下面有一个集合视图。 (制作 Instagram 探索页面)。点击搜索栏后,它应该会显示视图 SearchTableViewController
,该视图会在 table 视图中显示搜索查询的结果。
这是我的代码:
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 { [=11=].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
未被调用,我认为这是导致 table 视图的搜索结果未加载搜索查询数据的原因?
我也忘了将分配添加到导航控制器。即使您在另一个屏幕上显示搜索结果,您仍然需要添加它:
navigationItem.searchController = theSearchControllerYouInstantiated
出于某种原因,updateSearchResults
函数在我的视图 table 控制器视图中没有被调用,我不知道为什么?我看过这个 answer,但它与我的完全不同,我不想使用 textDidChange
函数。
我有这个视图 SearchViewController
,它的顶部有一个搜索栏,下面有一个集合视图。 (制作 Instagram 探索页面)。点击搜索栏后,它应该会显示视图 SearchTableViewController
,该视图会在 table 视图中显示搜索查询的结果。
这是我的代码:
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 { [=11=].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
未被调用,我认为这是导致 table 视图的搜索结果未加载搜索查询数据的原因?
我也忘了将分配添加到导航控制器。即使您在另一个屏幕上显示搜索结果,您仍然需要添加它:
navigationItem.searchController = theSearchControllerYouInstantiated