ios - searchcontroller - swift 4 search bar
Agregue UISearchBar a UINavigationBar con UIBarButtonItem (1)
Ya casi estás ahí. Debes hacer cuatro cosas:
- searchController.hidesNavigationBarDuringPresentation = false
- navigationItem.titleView = searchController.searchBar
- ocultar todos los UIBarButtonItems actuales que tienes en la barra de navegación
- searchController.searchBar.becomesFirstResponder ()
Es decir, configura tu UISearchController para que no oculte la barra de navegación, ya que UISearchBar se mostrará allí.
Luego, cuando tu IBAction se ejecuta, haces algo como:
navigationItem.hidesBackButton = true
navigationItem.titleView = searchController.searchBar
navigationItem.rightBarButtonItem = nil
searchController.searchBar.becomeFirstResponder()
Eso garantiza que UISearchBar usará toda la UINavigationBar cuando se convierta en el primer respondedor. También obtienes la animación UISearchBar, que hace un buen trabajo al ocultar la eliminación no animada de UIBarButtonItems.
Tendrá que implementar UISearchBarDelegate (o si prefiere UISearchControllerDelegate) para restaurar el estado original de la barra de navegación una vez que el usuario finaliza la búsqueda.
Un detalle muy importante es que para que tu UISearchBar sea editable en titleView, no se puede establecer ningún otro controlador de vista con definePresentationContext = true en el momento en que se presiona el tuyo.
En mi aplicación, solía tener una barra de búsqueda en la vista de encabezado de mi vista de tabla. Sin embargo, he agregado un elemento de botón de la barra de búsqueda, y cuando un usuario lo toca, quiero que una barra de búsqueda se active en la barra de navegación y el usuario debe poder buscar. Esto es algo así como la barra de búsqueda en la aplicación de Twitter para iOS. aquí está el código para mi UISearchController:
self.searchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self
controller.hidesNavigationBarDuringPresentation = true
controller.dimsBackgroundDuringPresentation = false
controller.searchBar.sizeToFit()
//self.tableView.tableHeaderView = controller.searchBar
self.definesPresentationContext = true
controller.searchBar.returnKeyType = .Search
controller.searchBar.delegate = self
return controller
})()
Así es como se ve mi UINavigationBar ahora mismo:
¿Cómo voy a hacer esto?