2010-08-09 14 views
7

Aquí está mi último problema con el SDK de iPhone.¿Cómo tener la barra de alcance UISearchBar siempre visible?

Tengo un UISearchBar y su delegado todo configurado. Además, cuando cargo mi punto de vista, me llaman

self.searchDisplayController.searchBar.showsScopeBar = YES; 

esta manera, cuando se presentó por primera vez mi punto de vista, veo la barra de alcance, como se esperaba. Pero si toca dentro de la barra de búsqueda y luego fuera de ella (o incluso si realiza una búsqueda y luego la cancela), la barra de alcance se oculta de nuevo.

Entonces mi pregunta es: ¿es posible tener la barra de alcance siempre visible? ¿Incluso después de realizar búsquedas?

Muchas gracias.

Respuesta

10

UISearchDisplayController está ocultando la barra de alcance para usted.

La forma de evitar esto es a subclase UISearchBar y anular la implementación de setShowsScopeBar:

@interface MySearchBar : UISearchBar { 

} 

@end 

@implementation MySearchBar 

- (void) setShowsScopeBar:(BOOL) show 
{ 
    [super setShowsScopeBar: YES]; // always show! 
} 

@end 

Luego, en el Interface Builder, cambiar la clase de la barra de búsqueda que tiene en su punto de vista (que se asocia con la UISearchDisplayController) al nuevo tipo de clase - MySearchBar en este ejemplo.

+0

Uno pensaría que uno de los métodos UISearchDisplayDelegate le permitiría reemplazar la ocultación de la barra de alcance, pero nada de lo que intenté funcionaría. Subclassing UISearchBar hace el trabajo. – dodgio

+4

Mientras esto funciona inicialmente, después de hacer clic en searchBar y cancelar la búsqueda en iOS7, la barra de alcance se oculta. No puedo encontrar una forma de codificarlo en iOS7 para volver a mostrar la barra de alcance después de que UISearchDisplayDelegate lo oculte. ¿Sabes de alguna manera? – msec

Cuestiones relacionadas