Cómo imitar los comportamientos de Safari de UISearch en iOS

Tengo un UISearchBar en el titleView de la barra de navigation (se ve como en la image a continuación) y quiero que funcione como en el browser Safari.

No tengo suficiente reputación para publicar imágenes, aquí está el enlace

Primera foto

introduzca la descripción de la imagen aquí

Segunda foto

introduzca la descripción de la imagen aquí

Lo que quiero lograr son:

  • En estado normal, la barra de navigation contiene 2 botones izquierdo y derecho, un UISearchBar y un button claro dentro de esa barra de búsqueda (se parece a la primera image con 2 botones adicionales).
  • En el estado de búsqueda, la view se reemplaza por otra view y cuando se descarta, la view vuelve al estado original.
  • Funciona tanto en iOS 6 y 7

Sé que esto se puede hacer usando UISearchDisplayController pero no funciona. Aquí está mi código:

.h : implementa TableView's DataSource/Delegate, UISearchDisplayDelegate, UISearchBarDelegate

.metro

 -(void) viewDidload { //Add left, right buttons self.leftButton = [[UIBarButtonItem alloc] init]; [self.leftButton setStyle:UIBarButtonItemStylePlain]; [self.leftButton setTitle:@"Button"]; self.navigationItem.leftBarButtonItem = self.leftButton; self.rightButton = [[UIBarButtonItem alloc] init]; [self.rightButton setStyle:UIBarButtonItemStylePlain]; [self.rightButton setTitle:@"Button"]; self.navigationItem.rightBarButtonItem = self.rightButton; self.searchBar = [[UISearchBar alloc] initWithFrame:self.navigationController.navigationBar.bounds]; if (DEVICE_IS_IOS7) { self.searchBar.searchBarStyle = UISearchBarStyleMinimal; } self.navigationItem.titleView = self.searchBar; self.searchBar.delegate = self; //---------------- self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self]; self.searchController.delegate = self; self.searchController.searchResultsDataSource = self; self.searchController.searchResultsDelegate = self; } /* table implementation */ 

En iOS 7, la view de UISearchDisplayController (la gris) no cubría la vista principal y resultTable no resultTable datos, incluso era capaz de filtrar la cadena de búsqueda. (Tuve que usar KVO para mostrarlo)

En iOS 6, lo gris cubre toda la pantalla y el keyboard no apareció (desapareció de inmediato).

¿Alguien puede ayudar? Gracias.

Dos veces tuve que hacer una interfaz de usuario muy similar a la que estás describiendo, la más reciente es más cercana a Twitter para el comportamiento UISearchBar iOS 7. Si desea mostrar un UISearchBar dentro de un UINavigationBar , olvídese de esa configuration por completo, ya que es probable que se UINavigationBar con obstáculos, como este (aunque parece haber sido arreglado por Apple ).

Fake en su lugar. UIViewController barra de navigation en su UIViewController y use una UIView con una altura de 64 para iOS 7 o 44 para iOS 6 y póngala en la parte superior, para que se vea como una barra de navigation. Agregue el UISearchBar dentro de él como una subvista normal, luego UISearchBarDelegate como desee en los methods UISearchBarDelegate .