2012-07-15 21 views
5

Implementé una barra de búsqueda y una capacidad de índice para mi vista de tabla. Trabajando bien. Sin embargo, noté que cuando hago clic en la barra de búsqueda, el índice aún está disponible y al hacer clic en él se producen resultados impredecibles. En lugar de depurar eso, pensé que sería más fácil ocultar el índice :)Ocultar barra de índice al buscar UITableView

Encontré referencias en otros lugares para llamar a sectionIndexTitlesForSectionView y devolver nil. Entonces, cuando hago clic en el cuadro de búsqueda, en searchBarTextDidBeginEditing he hecho una llamada explícita al [self sectionIndexTitlesForSectionView:[self tableView]].

El resultado es que sectionIndexTitlesForSectionView se invoca y devuelve nulo, pero el índice aún está presente.

¡Cualquier idea/sugerencia sería muy apreciada! Tony.

+0

¿Algún comentario, por favor? – Tony

+0

Todavía espero que alguien me pueda ayudar con esto. Gracias. – Tony

Respuesta

0

Simplemente tenga el método (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView return nil cuando está mostrando los resultados de búsqueda.

En mi caso, esto se ve algo como esto:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { 
    if (tableView == [self tableView]) { 
     return [[NSArray arrayWithObject:UITableViewIndexSearch] arrayByAddingObjectsFromArray:[collation sectionIndexTitles]]; 
    } 
    // search view, no index: 
    else return nil; 
} 
+0

Gracias por la sugerencia, Marcel. Tal vez no fui lo suficientemente claro, también estoy devolviendo el valor nulo. He confirmado en el depurador que no se devuelve nada de esta función, sin embargo, el índice aún se muestra. – Tony

+0

Entonces, creo que no entiendo bien el problema. Probablemente sea mejor publicar un código. –

+0

Aquí está el código: '- (NSArray *) sectionIndexTitlesForTableView: (UITableView *) tableView { // si buscara, no hay necesidad de visualizar el índice si (isSearchOn) nil retorno; else { // asegúrese de que el índice no se superpone al campo de entrada de la barra de búsqueda [(id) searchBar setContentInset: UIEdgeInsetsMake (5, 0, 5, 35)]; return englishIndex; } } ' – Tony

23

Tienes que volver nula en - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView si la búsqueda es activa, como se nota en su puesto. Luego, anule dos métodos del UISearchDisplayDelegate para actualizar los índices.

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller { 
    [self.tableView reloadSectionIndexTitles]; 
} 

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller { 
    [self.tableView reloadSectionIndexTitles]; 
} 

Para el método de sectionIndexTitlesForTableView, yo prefiero usar:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { 
    if (self.searchDisplayController.active) { 
     return nil; 
    } else { 
     //Add @"{search}", to beginning to add search icon to top of index 
     return @[@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", @"#"]; 
    } 
} 

NOTA: He encontrado que debe utilizar self.searchDisplayController.active en el caso de condiciones. No funciona si usa tableView != self.tableView.

0

Aquí está la manera simple, si no desea pasar nil en sectionIndexTitlesForTableView, si tiene que crear solo un índice para el texto de búsqueda y desea mostrar el texto de búsqueda como título del encabezado de sección.

NSArray *subViewsOfTblView = [self.tableView subviews]; 
if([subViewsOfTblView count] > 0) 
{ 
    UIView *indexVw = (UIView*)subViewsOfTblView[[subViewsOfTblView count] - 1]; 
    if(isSearchON || isFilterON) 
     indexVw.hidden = YES; 
    else 
     indexVw.hidden = NO; 
} 
Cuestiones relacionadas