UISearchBar 和 UISearchBarController 的区别?

Sam*_*ery 1 xcode uisearchbar ios swift

我对 aUISearchBar/UISearchBarDelegate和 a之间的区别感到困惑UISearchBarController

现在,这就是我为实现搜索栏所做的工作:

class SearchViewController: UIViewController {
    @IBOutlet weak var searchBar: UISearchBar!
}

extension SearchViewController: UISearchBarDelegate {

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        searchBar.resignFirstResponder()
        if !searchBar.text!.isEmpty {
            performSegue(withIdentifier: "Search", sender: searchBar.text!)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在网上看到有人在做这样的事情:

let searchController = UISearchController(searchResultsController: nil)
Run Code Online (Sandbox Code Playgroud)

这和我正在做的事情有什么区别?

Swe*_*per 5

您的问题有点类似于问“UIView和之间有什么区别UIViewController?”

UISearchBar是一种观点。它有一个文本字段和(可选)一个按钮,仅此而已。

UISearchController是一个控制“搜索”更抽象行为的控制器。它的工作之一是控制它的行为searchBar,但它也有许多其他工作,例如告诉searchResultsUpdater它应该更新搜索结果(因为搜索栏中的文本已更改,或者其他什么)。它还公开诸如obscuresBackgroundDuringPresentation和 之类的属性,hidesNavigationBarDuringPresentation以控制当搜索栏是第一响应者时视图的外观。

如果您直接使用UISearchBar,那么您需要手动实现UISearchController为您所做的所有这些事情。如果您的意图是创建自己的搜索行为类型UISearchController,但如果您只想在应用程序中使用简单的旧搜索功能,请使用此功能,UISearchController因为它会为您节省大量时间。