iOS7 cuando UIsearchbar agregado en UINavigationBar no muestra el botón de cancelar
(7)
Desde iOS 7, simplemente puede configurar la propiedad displaysSearchBarInNavigationBar
en YES
en el UISearchDisplayController
para obtener automáticamente una UISearchbar
de UISearchbar
en la UISearchbar
de navegación.
Agrego UISearchBar arriba de UINavigationBar y configuro UIsearchbar muestraCancelButton YES, funciona bien en iOS6 pero en iOS7 no muestra el botón de cancelar Usé el siguiente fragmento de código
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 600, 44)];
searchBar.showsCancelButton = YES;
searchBar.translucent = NO;
[searchBar setTintColor:[UIColor redColor]];
searchBar.backgroundColor = [UIColor yellowColor];
[self.navigationController.navigationBar addSubview:searchBar];
Implementar el delegado de la barra de búsqueda y usar esto:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
searchBar.showsCancelButton = YES;
}
Me encontré con el mismo problema, aquí está mi solución, espero que esto ayude.
Algunas explicaciones adicionales: descubrí que enviar setShowsCancelButton:animated:
a searchBar, simplemente funciona como magia. Y la forma más limpia de agregar un searchBar a la barra de navegación es self.navigationItem.titleView = self.searchBar;
El momento apropiado para llamar a setShowsCancelButton:animated:
es en searchBarTextDidBeginEditing:
y searchBarTextDidEndEditing:
métodos de delegado, así que recuerde configurar self
para que sea el delegado de searchBar.
- (void)viewDidLoad
{
self.navigationItem.titleView = self.searchBar;
}
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
[searchBar setShowsCancelButton:YES animated:YES];
}
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
[searchBar setShowsCancelButton:NO animated:YES];
}
Por alguna razón, iOS7 no muestra el botón de cancelar cuando se agrega a una barra de navegación. Esto también sucede si intentas configurarlo como el títuloVista de un elemento de navegación.
Puede evitar este problema envolviendo la barra UISearch en otra vista UIV. Así es como lo hago como un título:
UISearchBar *searchBar = [UISearchBar new];
searchBar.showsCancelButton = YES;
[searchBar sizeToFit];
UIView *barWrapper = [[UIView alloc]initWithFrame:searchBar.bounds];
[barWrapper addSubview:searchBar];
self.navigationItem.titleView = barWrapper;
Sí. El botón iOS 7 se encuentra en la pantalla, pero su título podría ser invisible. Mi solución fue establecer el Estilo de búsqueda en "Mínimo" y elegir el color del color de la barra para el color del texto "Cancelar" en IB
Y el resultado en un simulador:
Tuve el mismo problema, en el iPhone, la cancelación de búsqueda se mostró bien, pero en el iPad no fue así.
La solución de envolver la barra UISearch en otra vista UIV no funcionó bien para mí, ya que tenía una apariencia diferente y un ancho incorrecto en la rotación.
Mi solución es simple: utilice la búsqueda SIN cancelar y agregue cancelar como UIBarButtonItem.
Tuve un problema similar, en la barra de búsqueda del iPhone con el botón de cancelar se muestra bien, pero en el iPad no se mostró el botón de cancelar. Envolver el UIsearchBar a UIView como @Rodskjegg lanzar el problema de estilo. En el iPad, UIsearchBar lo configura como el títuloVista de un elemento de navegación y agrega UIBarButtonItem a setRighttBarButtonItem como UIBarButtonSystemItemCancel.
[self.navigationItem setLeftBarButtonItem:Nil animated:YES];
self.navigationItem.titleView = self.searchBar;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(searchBarCancelButtonClicked:)];
[self.navigationItem setRightBarButtonItem: cancelButton animated:YES];
}
else {
[self.navigationItem setRightBarButtonItem: nil animated:YES];
}