updatesearchresults searchcontroller how for example custom bar ios uitableview cocoa-touch segue uisearchcontroller

ios - how - UISearchController persiste después de segue



searchbar swift 3 (2)

Tengo una aplicación con UISearchController. Este elemento de la IU está completamente configurado en un código como este:

searchController = UISearchController(searchResultsController: nil) searchController.searchResultsUpdater = self searchController.searchBar.delegate = self searchController.dimsBackgroundDuringPresentation = false searchController.hidesNavigationBarDuringPresentation = false searchController.searchBar.searchBarStyle = UISearchBarStyle.Minimal searchController.searchBar.frame = CGRectMake(searchController.searchBar.frame.origin.x, searchController.searchBar.frame.origin.y, searchController.searchBar.frame.size.width, 44.0)

Luego lo estoy agregando a la tabla TableView''s HeaderView

tableView.tableHeaderView = searchController.searchBar

Todo parece estar funcionando bien, pero cuando está activo y selecciono un elemento en mi tableView, mi aplicación pasa a otro controlador de vista con el controlador de búsqueda persistiendo en la vista. No estoy seguro de cómo es posible, ya que el controlador de búsqueda debe ser una subvista de la vista de tabla en otro controlador de vista. ¿Cómo puedo evitar que esto suceda?


Puede ocultar SearchController manualmente estableciendo la propiedad activa en false en prepareForSegue . Agregue el código siguiente en prepareForSegue()

searchController.active = false

Alternativamente, debe agregar la siguiente línea en viewDidLoad() para obtener el comportamiento predeterminado

definesPresentationContext = true

De la documentación para definesPresentationContext

Un valor booleano que indica si la vista de este controlador de vista está cubierta cuando el controlador de vista o uno de sus descendientes presenta un controlador de vista.

Discusión

Cuando se presenta un controlador de vista, iOS comienza con el controlador de vista de presentación y le pregunta si desea proporcionar el contexto de presentación. Si el controlador de vista que presenta no proporciona un contexto, entonces iOS pregunta al controlador de vista principal del controlador de vista que presenta. iOS busca a través de la jerarquía del controlador de vista hasta que un controlador de vista proporcione un contexto de presentación. Si ningún controlador de vista ofrece proporcionar un contexto, el controlador de vista raíz de la ventana proporciona el contexto de presentación.

Si un controlador de vista devuelve verdadero, entonces proporciona un contexto de presentación. La porción de la ventana cubierta por la vista del controlador de vista determina el tamaño de la vista del controlador de vista presentado. El valor predeterminado para esta propiedad es falso.


Si gestiona sus propias transiciones y usa popToViewController para abandonar la vista, proporcione el contexto en el SearchController en lugar de la vista

searchController.definesPresentationContext = true

o obtendrás un error

popToViewController:transition: called on <UINavigationController 0x7f984204f800> while an existing transition or presentation is occurring; the navigation stack will not be updated