2011-03-07 7 views
1

J'ai une vue de table dans mon application ... Le contenu de cette vue de liste est affiché basé sur la recherche dynamique d'ext API ...Quand cellForRowAtIndexPath est-il appelé?

par exemple. Si je tape "G" dans searchbar il affiche GA, GB, GC1, GC2, GC3, ..

si je change maintenant GC, il ne affiche GC1, GC2, GC3 ..

I Je stocke les éléments dans un tableau ..

Ma question est comment puis-je m'assurer que ce que l'utilisateur tape et voit que les résultats de recherche sont synchronisés .. Je veux dire s'il clique sur GC1 dans la vue de liste, il devrait voir GC1 détails et pas d'autres ..

Quand est-ce que cellForRowAtIndexPath est appelé pour que je puisse mettre à jour le tableau chaque fois que l'utilisateur tape dans la barre de recherche?

Répondre

1

Vous devez mettre à jour votre tableau d'éléments filtrés dans la méthode filterContentForSearchText: scope:. Il existe une autre méthode, searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString, qui sera appelée lorsque l'utilisateur tape dans la barre de recherche. Si vous renvoyez YES à partir de cette méthode, la table sera rechargée, ce qui provoquera l'appel de cellForRowAtIndexPath:.

+0

Pourriez-vous s'il vous plaît fournir un exemple de ceci. – testndtv

+0

Cela dépend complètement de vos méthodes de filtrage et de ce que vous utilisez pour stocker vos résultats ... mais juste re-filtrer dans filterContentForSearchText; et cela devrait fonctionner correctement ... si vous avez plus de problèmes, postez votre code et spécifiez ce qui ne fonctionne pas. – GendoIkari

3

-cellForRowAtIndexPath: est envoyé par la table à chaque fois qu'elle souhaite afficher une cellule, par exemple lorsque la table est redessinée ou lorsqu'une nouvelle cellule est nécessaire car l'utilisateur a fait défiler un bit.

Vous pouvez forcer la table à mettre à jour son contenu en appelant [table reloadData], si 'table' est un pointeur sur votre table.

+0

Donc, si j'ai besoin d'appeler manuellement cellForRowAtIndexPath, je dois dire que [table reloadData] est-ce correct? – testndtv

+0

Vous ne devez pas appeler -cellForRowAtIndexPath: vous-même - la table l'appellera si nécessaire. Mais oui, si le contenu de votre table change, comme lorsque l'utilisateur modifie le terme de recherche, vous devez appeler -reloadData sur la table pour demander à la table de charger un nouveau jeu de cellules. – Caleb

+2

S'il utilise searchBar et searchDisplayController, il n'est pas nécessaire d'appeler reloadData ... shouldReloadTableForSearchString: le traitera pour lui. – GendoIkari

Questions connexes