Я хочу добиться чего-то очень простого: панель поиска на панели навигации с кнопкой «Отмена», которая показывает, когда панель активирована.
Я использую UISearchController
, и в настоящее время у меня есть следующее:
override func viewDidLoad() {
super.viewDidLoad()
...
let searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.delegate = self
searchController.searchBar.delegate = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.searchBar.sizeToFit()
self.navigationItem.titleView = searchController.searchBar
self.definesPresentationContext = true
}
Строка поиска показывает. Однако, если я сфокусируюсь на этом, кнопка «Отмена» не отображается, и никакие методы делегата не вызываются вообще. То есть методы в протоколах UISearchResultsUpdating
, UISearchControllerDelegate
или UISearchBarDelegate
не вызываются, хотя я установил self
для ответа на все из них.
Если я добавлю следующую строку в viewDidLoad
, методы делегата начнут функционировать:
self.navigationItem.searchController = searchController
Однако тогда я не могу поместить панель поиска внутри панели навигации. Вместо этого он отображается под панелью навигации.
Я много искал в SO, но, похоже, у меня ничего не работает. Я могу упустить что-то очевидное здесь - как я могу заставить это работать? Спасибо!