触摸搜索栏时未调用 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