2009-05-08 15 views
6

J'ai un UITableView avec un UISearchBar en haut de celui-ci.iPhone UITableView avec UISearchBar et rafraîchissement Section Index

J'utilise également le délégué Section Index pour afficher ABC ... XYZ sur le côté droit.

Problème se produit lorsque je clique sur le champ de recherche et que le clavier se relève par le bas, l'index de section est écrasé seulement A D ... * Z sont affichés - lorsque je ferme la recherche et que le clavier disparaît , l'index reste dans cet état "écrasé" jusqu'à ce que je défile ou similaire.

// animate the searchbar 
[UIView beginAnimations:nil context:NULL]; 
CGRect tempRect = [[self searchBar] frame]; 
tempRect.size.width = 320-kMarginRight; 
[[self searchBar] setFrame:tempRect]; 
[UIView commitAnimations]; 

    // animate the search index back into view 
for (UIView *view in [[self tableView] subviews]) { 
    if ([view respondsToSelector:@selector(moveIndexIn)]) { 
     MovableTableViewIndex *index = (MovableTableViewIndex*)view; 
     [index moveIndexIn]; 
    } 
} 

    // try a whole load of stuff to try and get the section indexes to draw again properly 
    // none of which work! 

[searchBar setText:@""]; 
[searchBar resignFirstResponder]; 

letUserSelectRow = YES; 
searching = NO; 
[[self navigationItem] setRightBarButtonItem:nil]; 
[[self tableView] setScrollEnabled:YES];   
[[self tableView] reloadData]; 
[[self tableView] flashScrollIndicators]; 
[[self tableView] sizeToFit]; 
[[self tableView] zoomScale];  
[[self tableView] reloadSectionIndexTitles]; 

Mes questions sont, Quelqu'un a-t-il déjà vu ce comportement? Y at-il un moyen de redessiner l'index de section sur le RHS ([[self tableView] reloadData] ne fait pas l'affaire)

Merci un million!

Répondre

4

Vous devez désactiver le dessin des index lorsque la recherche est entièrement activée. Il suffit de renvoyer zéro dans votre délégué, quelque chose comme ceci:

 
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { 
    if ([self.searchDisplayController isActive]) return nil; 

    ... 
} 
2

Vous pouvez essayer d'utiliser

- (void)flashScrollIndicators 

qui rafraîchit la barre de défilement et nous espérons que l'indice de section trop?

+0

j'ai modifié mon ci-dessus après pour montrer le code exact je suis en utilisant ... en vain! – adam

1

Cela fonctionne très bien !!!

[searchBar setContentInset:UIEdgeInsetsMake(5, 0, 5, 35)];

+0

Celui-ci a effectivement travaillé pour moi mais malheureusement c'est une API non documentée :( –