将 UISearchController 连接到 UISearchBar 而无需将搜索栏嵌入到表视图或导航栏中

Connect UISearchController to UISearchBar without embedding the search bar in the tableview or in the navigation bar

首先,如果这个问题听起来太愚蠢了(请随意跳过),我们深表歉意。

在我的应用中,我需要创建一个搜索区域:基本上,我应该创建一个搜索栏,当用户点击其中的一些字符时,我会显示一个包含结果的表格视图。

在我的主要 ViewController 中,我做了以下事情:

var resultSearchController:UISearchController? = nil

    override func viewDidLoad() {

         super.viewDidLoad()

         // my results table is 'SearchTable' in my storyboard
         let searchTable = storyboard!.instantiateViewController(withIdentifier: "SearchTable") as! SearchTable
         resultSearchController = UISearchController(searchResultsController: searchTable)
         resultSearchController?.searchResultsUpdater = searchTable as? UISearchResultsUpdating

         resultSearchController?.hidesNavigationBarDuringPresentation = false
         resultSearchController?.dimsBackgroundDuringPresentation = true
         definesPresentationContext = true

当然,如果我添加以下内容,一切正常:

let searchBar = resultSearchController!.searchBar
searchBar.sizeToFit()
searchBar.placeholder = "Search..."
// this line embeds the search bar in the navigation bar
navigationItem.titleView = resultSearchController?.searchBar

UISearchController 创建一个 UISearchBar 并将搜索控制器的 searchBar 属性 设置为它。

问题是我想要一个不同的东西,那就是:

  1. 搜索栏应该嵌入到导航栏中;
  2. 搜索栏应该嵌入到表格视图本身;

我的搜索栏应该始终可见、固定并放置在导航栏的正下方:我只是在故事板中放置了一个 UISearchBar 及其约束,并将其连接到 viewcontroller 作为IBOutlet.

但是,此时我不知道如何将我的搜索栏关联到 resultSearchController。我怎么办?可能吗?

你做了所有的努力,你错过的事情对你所做的来说是微不足道的。

基本上您应该使用代码将 UISearchBar resultSearchController!.searchBar 作为子视图添加到视图中。我不认为 Storyboard 可以做到这一点,这可能会让你感到困惑。