在没有 UINavigationController 的情况下如何使用 UISearchController?

Big*_*337 2 uikit uinavigationcontroller ios swift uisearchcontroller

当视图控制器未嵌入 UINavigationController 中时,我不明白如何使用 UISearchController 。

为了说明我的意思,请尝试下载此代码:https://developer.apple.com/documentation/uikit/view_controllers/displaying_searchable_content_by_using_a_search_controller

然后,删除导航控制器并使表格搜索场景成为初始视图控制器。该表仍然正常工作,但搜索控制器不显示。

有没有办法修改该代码,以便您可以使用 UISearchController 而无需将其嵌入导航控制器中?我在文档中没有看到任何需要 UINavigationController 的内容。所有与此相关的堆栈溢出问题都告诉您单独使用 UISearchBar。我对使用 UISearchController 特别感兴趣。

mat*_*att 8

这个问题你可能想多了。您完全可以使用没有导航控制器或表格视图的 UISearchController。人们使用表视图的唯一原因是有某种方式来显示搜索结果是很好的。但 UISearchController 是一个完全普通的视图控制器,无论如何都只是完成它的工作。它确实是世界上最简单的东西 \xe2\x80\x94 这就是它的美妙之处。它是如此简单,它可以做任何与搜索有关的事情。

\n

这是我能想到的最小的例子。这基本上是应用程序的整个代码:

\n
class ViewController: UIViewController {\n    var sc : UISearchController?\n    override var prefersStatusBarHidden: Bool { true }\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        let vc2 = ViewController2()\n        let sc = UISearchController(searchResultsController: vc2)\n        self.sc = sc\n        sc.searchResultsUpdater = vc2\n        let sb = sc.searchBar\n        self.view.addSubview(sb)\n    }\n}\nclass ViewController2: UIViewController, UISearchResultsUpdating {\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        self.view.backgroundColor = .green\n    }\n    func updateSearchResults(for searchController: UISearchController) {\n        guard searchController.isActive else {return}\n        if let t = searchController.searchBar.text, !t.isEmpty {\n            print("You are searching for", t)\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这完美地说明了 UISearchController 所做的事情,即几乎什么都不做。它只是通过放置辅助视图控制器并在用户在搜索栏中键入时发出信号来响应用户在搜索栏中的点击。其他一切都取决于你。

\n