Я внедрил UISearchController
, чтобы он отображал верхнюю позицию UINavigationBar
при нажатии на значок поиска. После фильтрации таблицы пользователь должен иметь возможность выбирать строку, которая будет вызывать новый контроллер представлений. Проблема заключается в том, что при этом контроллер поиска все еще отображается поверх панели навигации.Нажатие контроллера просмотра при представлении UISearchController через UINavigationBar
Я исследовал это, и было предложено установить self.definedPresentationContext
на true
. Это не работает, когда панель поиска отображается поверх панели навигации. При нажатии на значок поиска клавиатура появляется, но панель поиска не анимировать.
Другой вариант я нашел, чтобы закрыть контроллер поиска в viewWillDisappear
, установив active
в false
. Проблема с этим решением заключается в том, что он оживляется во время переходного перехода. И когда вы переходите назад, поиск, очевидно, уже неактивен, поэтому пользователь потерял контекст поиска, и все результаты показаны.
Я хотел бы знать, как нажать контроллер вида, сохранить поиск активным, но не показывать надстрочный интерфейс интерфейса поиска следующего контроллера. В идеале интерфейс поиска будет отброшен влево, когда новый контроллер представления будет нажат, и вернитесь, возвращаясь к результатам поиска.
Я искал образец кода UIKit для Apple, чтобы показать нежелательное поведение. Чтобы воспроизвести проблему, download this project, запустите ее на iPhone, нажмите кнопку «Назад», выберите «Поиск», выберите «Наверх», нажмите значок поиска, введите поисковый запрос и выберите результат. Обратите внимание, что панель поиска остается видимой. Вот код из SearchPresentOverNavigationBarViewController.swift
:
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
if searchController.active {
//searchController.active = false //undesirably dismisses search, animates away during push, upon going back search is not active
}
}
@IBAction func searchButtonClicked(button: UIBarButtonItem) {
//self.definesPresentationContext = true //causes the search to not appear
searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = false
presentViewController(searchController, animated: true, completion: nil)
}