tutorial searchcontroller example bar ios swift uinavigationcontroller uinavigationbar uisearchbar

ios - searchcontroller - swift 4 search bar



Agregue UISearchBar a UINavigationBar con UIBarButtonItem (1)

Ya casi estás ahí. Debes hacer cuatro cosas:

  1. searchController.hidesNavigationBarDuringPresentation = false
  2. navigationItem.titleView = searchController.searchBar
  3. ocultar todos los UIBarButtonItems actuales que tienes en la barra de navegación
  4. 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?