2010-04-26 8 views
9

UISearchDisplayController es muy útil y la implementación de la búsqueda es bastante sencilla.UISearchDisplayController: cómo mostrar el resultado de la búsqueda con solo el botón de alcance seleccionado pero cadena de búsqueda vacía

Sin embargo, me encuentro con un problema cuando, en mi aplicación, quiero mostrar el resultado de búsqueda con una cadena de búsqueda vacía pero con el botón de alcance seleccionado.

Parece que es imprescindible ingresar una cadena de búsqueda para que la tabla de resultados de búsqueda se inicialice y se muestre.

¿Hay alguna forma de mostrar el resultado de la búsqueda inmediatamente después de que el usuario haya elegido un alcance pero aún no haya ingresado la palabra de búsqueda?

Gracias Bill

+0

tengo la misma pregunta. ¿Alguien tiene una respuesta a esto? –

Respuesta

2

cuando se toca un botón nuevo alcance los incendios selectedScopeButtonIndex:

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption; 

se podía capturar el fuego título de tu búsqueda aquí usando:

[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption] 

Won' t Trabaja en el índice de alcance inicial, pero puede iniciar su búsqueda inicialmente basándose en el último usado selectedScopeButtonIndex

1

Estaba buscando lo mismo y acabo de encontrar algo en los foros de desarrolladores de Apple: El UISearchDisplayController se implementa de forma que la tabla de resultados no se muestre hasta que se ingrese un texto. También hay un informe de error al respecto: ID # 8839635.

Trabajé alrededor de él colocando un control segmentado debajo de la barra de búsqueda, imitando la barra de alcance.

0

Aquí hay una solución que usa los botones de alcance. Lo principal es agregar un carácter adicional para el (los) alcance (s) que desea mostrar los resultados de búsqueda de forma automática, pero asegúrese de eliminarlo para el (los) alcance (s) que no desea hacer esto.

Usted tendrá que aplicar searchBar:textDidChange, así como searchBar:selectedScopeButtonIndexDidChange:

// scope All doesn't do a search until you type something in, so don't show the search table view 
// scope Faves and Recent will do a search by default 
#define kSearchScopeAll 0 
#define kSearchScopeFaves 1 
#define kSearchScopeRecent 2 

// this gets fired both from user interaction and from programmatically changing the text 
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ 
    [self initiateSearch]; 
} 


- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope{ 
    NSString *searchText = self.searchDisplayController.searchBar.text; 
    // if we got here by selecting scope all after one of the others with no user input, there will be a space in the search text 

    NSString *strippedText = [searchText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
    if ((selectedScope == kSearchScopeAll) && (strippedText.length == 0) && (searchText.length != 0)){ 
     self.searchDisplayController.searchBar.text = @""; 
    } else { 
     [self initiateSearch]; 
    } 
} 

-(void)initiateSearch{ 
    NSString *searchText = self.searchDisplayController.searchBar.text; 
    NSInteger scope = self.searchDisplayController.searchBar.selectedScopeButtonIndex; 
    if ((searchText.length == 0) && (scope != kSearchScopeAll)){ 
     self.searchDisplayController.searchBar.text = @" "; 
    } 
    switch (scope) { 
     case kSearchScopeAll: 
      [self searchAll:searchText]; 
      break; 
     case kSearchScopeFaves: 
      [self searchFavorites:searchText]; 
      break; 
     case kSearchScopeRecent: 
      [self searchRecents:searchText]; 
      break; 

     default: 
      break; 
    } 
} 

// assume these trim whitespace from the search term 
-(void)searchAll:(NSString *)searchText{ 
} 

-(void)searchFavorites:(NSString *)searchText{ 
} 

-(void)searchRecents:(NSString *)searchText{ 
} 
Cuestiones relacionadas