2009-09-01 6 views
1

Je travaille sur une application iPhone avec une fonction de recherche, où l'écriture des termes de recherche dans un UISearchBar change (filtres) la sortie de l'UITabelView ci-dessous.Iphone Search Bar efface le bouton écrasant l'application

Lorsque l'utilisateur édite le contenu de la barre de recherche et supprime tout le texte, le code suivant est exécuté dans

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 

    if([searchText isEqualToString:@""] || searchText==nil){ 

    [tableData removeAllObjects]; //clear array that holds data for table view 
    [tableData addObjectsFromArray:tumorNames]; //load array with database 
    [searchTableView reloadData]; 
    return; 
    } 
} 

(method continues...) 

Maintenant, cela fonctionne très bien lors de l'édition dans la barre de recherche: si vous supprimez tout le texte avec retour arrière/effacement ou appuyez sur le bouton 'effacer' n'a pas d'importance - le champ de recherche est effacé et tous les éléments interrogeables sont rendus visibles dans la vue tableau. Il en va de même pour appuyer sur le bouton «Annuler», mais dans ce cas, bien sûr, la barre de recherche démissionne du premier répondant. Cependant, lorsqu'une recherche a été effectuée et qu'un ou plusieurs éléments de résultat sont affichés dans la vue de la table (la barre de recherche a démissionné le premier répondeur et le clavier est parti), appuyer sur le bouton Effacer est toujours possible, mais entraîne l'application plantage avec le message suivant:

'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)' 

Il semble que le problème est dans le rechargement des données de vue de la table, mais je ne peux pas comprendre pourquoi il y aurait un problème avec l'indice du tableau dans un cas mais pas dans l'autre.

Quelqu'un sait pourquoi cela se produirait? Toute aide appréciée.

Gregor, Suède

Répondre

2

fin de compte, lorsque le bouton d'effacement est cliqué, la méthode déléguée

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 

est appelée après la méthode

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 

Cela peut sembler étrange , mais explique mon problème: comme je vider le tableau contenant les données pour la vue de la table dans l'ancien moi thod (pour effacer la dernière recherche), j'obtiens une erreur lorsque la vue de table essaie de lire.

Problème résolu, espérons que cette information est utile à quelqu'un d'autre.

Tout ce que je dois faire maintenant est de faire en sorte que la barre de recherche ne devienne pas le premier répondeur lorsqu'on clique sur le bouton d'annulation. Quelqu'un sait-il comment faire ça?

Gregor, Suède

+0

[searchBar resignFirstResponder]; fait le tour – Souljacker

0

Vous pouvez essayer primordial - (BOOL)acceptsFirstResponder et retourner NO si Searchfield contient @"" le, mais le tableau != nil. Je pense que cela devrait fonctionner.

1
(void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText { 
     ... 
     [searchBar becomeFirstResponder]; 
[self.tableView reloadData]; 
Questions connexes