2010-10-02 8 views
7

Quiero ser capaz de buscar una cadena sin ningún carácter en ella. El problema es que el teclado predeterminado no aparece en el botón de búsqueda, cuando no hay nada escrito en UISearchBar.iPhone: UISearchBar cómo buscar "" Cadena?

¿Alguna idea?

Gracias, Markus

+0

¿Por qué quiere buscar para nada? – BoltClock

+5

porque una cadena de búsqueda vacía devuelve todo ... la búsqueda es como un filtro ... – Markus

Respuesta

18

Afortunadamente, simplemente estaba trabajando en un código que hace exactamente esto. Es un poco de un truco, pero se puede encontrar la UITextField que está incrustado dentro de la UISearchBar, a continuación, apague enablesReturnKeyAutomatically:

UITextField *searchBarTextField = nil; 
for (UIView *subview in searchBar.subviews) 
{ 
    if ([subview isKindOfClass:[UITextField class]]) 
    { 
     searchBarTextField = (UITextField *)subview; 
     break; 
    } 
} 
searchBarTextField.enablesReturnKeyAutomatically = NO; 
+0

También me gusta esta respuesta, pero no creo que sea intuitiva desde el punto de vista de la experiencia del usuario. – Jordan

+1

lo usé con un propósito completamente distinto: abrir el teclado por defecto cuando primero se muestra una vista con UISearchBar, llamando [searchBarTextField becomeFirstResponder]. Un verdadero misterio por el que no sobrecargaron becomeFirstResponder para UISearchBar para hacer lo correcto y mostrar el teclado. ¡Gracias! –

1

Tipo * y usar eso como un marcador de posición en su programa para "" (nada).

0

Buscar "" es como buscar nil/NULL: la consulta devolverá todas las entradas que estén vacías o nulas.

El * es un personajecomodín utilizado en la mayoría de las marcas de búsqueda, y va a volver todos los partidos.

+1

Solo para aclarar más, '" "' es ** no ** nulo/NULO, pero se considera la cadena * nula * (vacía cuerda). – Sean

+0

Normalmente, a medida que se agregan más caracteres, el conjunto filtrado se reduce en conteo. En consecuencia, si se eliminan todos los caracteres de búsqueda, entonces lo que debería ocurrir "naturalmente" es que se devuelva todo el conjunto sin filtrar. es decir. la búsqueda de nada está intuitivamente más alineada con la ausencia de filtro. –

0

mientras que la búsqueda de un texto. es difícil buscar una cadena sin carácter ... por lo que necesita para trabajar en

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    //write code here 
} 

se ejecutará automáticamente

0

esto es lo que hice

Para quitar el teclado en retroceso hasta el blanco :

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    if ([searchText isEqualToString:@""]) { 
     [searchBar resignFirstResponder]; 
    } 
} 

también tendrá que configurar su UITextField dentro de su uisearchbar al mismo delegado, recuerde que debe añadir a este delegado (en m contexto y del código del delegado es auto)

for (UIView *view in searchBar.subviews){ 
     if ([view isKindOfClass: [UITextField class]]) { 
      UITextField *tf = (UITextField *)view; 
      tf.delegate = self; 
      break; 
     } 
    } 

siguiente al añadir de inmediato a su delegado

- (void)searchBarCancelButtonClicked:(UISearchBar *) aSearchBar { 
    [aSearchBar resignFirstResponder]; 
} 

-(BOOL)textFieldShouldClear:(UITextField *)textField 
{ 
    [self performSelector:@selector(searchBarCancelButtonClicked:) withObject:textField.superview afterDelay: 0.1]; 
    return YES; 
} 

cuando cualquiera de estos gatillo, lleve a cabo su búsqueda de "" cadena

7

Daniels respuesta funciona perfecto hasta iOS 7.

iOS 7 Actualización

- (void)searchBarTextDidBeginEditing:(UISearchBar *) bar 
{ 
    UITextField *searchBarTextField = nil; 

    NSArray *views = ([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0f) ? bar.subviews : [[bar.subviews objectAtIndex:0] subviews]; 

    for (UIView *subview in views) 
    { 
     if ([subview isKindOfClass:[UITextField class]]) 
     { 
      searchBarTextField = (UITextField *)subview; 
      break; 
     } 
    } 
    searchBarTextField.enablesReturnKeyAutomatically = NO; 
}