2010-12-04 5 views
3

J'ai une application qui recherche de manière asynchrone une API à distance et affiche l'interface utilisateur à l'aide de UISearchDisplayController d'iOS. Pour une fonction de recherche sauvegardée, j'ai essayé d'utiliser UISearchDisplayController par programmation, à la fois pour initier la recherche et pour configurer l'interface utilisateur pour qu'elle soit là où elle était. (Ie., Je suis en train de faire apparaître la barre de recherche et définir le terme de recherche.)utiliser par programme UISearchDisplayController

searchTableViewController.searchDisplayController.searchBar.text = mySearchTerm; 
//[...] 
[searchTableViewController.searchDisplayController setActive:YES animated:YES]; 
[searchTableViewController performSearch]; 

Le code que je l'ai essayé jusqu'à présent au-dessus-ne semblent faire l'affaire. Alors qu'il affiche correctement la barre de recherche, définit le terme de recherche et effectue une recherche, le système ne semble pas reconnaître cela comme une recherche valide en quelque sorte. Si j'utilise mes doigts dans la vue des résultats pour faire disparaître le clavier, le terme de recherche se réinitialise et les résultats disparaissent.

ex1 ex2

Aide appréciée. Merci!

+0

http://stackoverflow.com/questions/8696260/creating-a-uisearchdisplaycontroller-programmatically – Hemang

Répondre

0

J'ai rencontré le même problème. J'ai résolu ceci en créant l'ivar NSString * savedSearchString; et en ajoutant les méthodes suivantes dans le délégué pour UISearchDisplayController.

- (void) searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller 
{ 
    // saves search string for next search 
    [savedSearchString release]; 
    savedSearchString = [controller.searchBar.text retain]; 
    return; 
} 

- (void) searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller 
{ 
    // shows keyboard and gives text box in searchBar the focus 
    [controller.searchBar becomeFirstResponder]; 

    // shows previous search results 
    if ((savedSearchString)) 
     controller.searchBar.text = savedSearchString; 

    return; 
} 

Ajouter la ligne controller.searchBar.text = savedSearchString; à searchDisplayControllerWillBeginSearch: provoqueraient apparaître le terme de recherche dans le UISearchBar, mais le tableau des résultats ne serait pas rechargées.

La transition est un peu rude s'il existe une chaîne de recherche précédente. Si je trouve une meilleure implémentation qui n'a pas de transition approximative, je mettrai à jour ma réponse.

Questions connexes