Utilisation des UISegmented Control pour trier un UITableView
Bonjour messieurs, j'ai besoin de vos lumières concernant le moyen de filtrer un NSMutableArray.
Pour le contexte, je récupère des contacts à l'aide d'une requête JSON que je stocke dans un NSMutableArray.
Je les affiche ensuite dans un UITableView, jusque là rien de vraiment compliqué.
Ensuite après quelques recherches j'ai pu à l'aide de NSPredicate filtrer mon NSMutableArray lors d'un clique.
J'utilise en fait un UISegmented Control avec 4 segments, 4 boutons donc.
Pour chaque segment, le NSPredicate est différent.
Par exemple le segment 1 ne va afficher que les Contacts de type "Entreprise" etc...
J'arrive à correctement filtrer mon Array car lorsque j'affiche le count de mon Array il diffère.
Néanmoins je n'arrive pas à afficher les contacts de cet Array. J'imagine que je ne fais pas le lien avec l'Array filteredListContacts mais je ne sais pas comment m'y prendre pour le faire.
Merci d'avance pour votre aide.
Réponses
Faut que fasse un tatableview reloadData une fois l'array filtrée
Euh... Bon bah, tant pis, je ne peux pas répondre !!! >:D
Sinon, si tu poste le code que tu as essayé, ce sera plus simple de t'aider...
@Geoffrey
J'effectue déjà un reload data de mon tableView mais le problème c'est que j'affiche par défaut listContacts, et que je sauvegarde avec un NSPredicate mes contacts filtré dans filteredListContacts.
J'ai donc deux Array à afficher. A moins qu'il soit possible de le faire avec un seul array et de revenir à l'original lorsqu'on retire le filtre ?
@Alf1996 Haha désolé
.
Voici ce que j'ai fais :
Ca doit être possible avec un seul array (je pense mais pas sur).
Avec 2 arrays :
Tu déclares un booleen : BOOL filteredTable;
Et dans tes méthodes de datasource du la tableview (numberOfRowsInSection, etc...) tu regarde dans quel cas tu es, si t'es filtered, t'utilise ton 2e array, sinon le premier.
Et dans ton action de changevalue du segmented control tu positionne le boolean comme il faut.
C'est parfait, ça fonctionne très bien
Merci pour ton aide, je suis désormais face à un autre souci ; savez-vous comment faire en sorte de désélectionner le segment si il est sélectionné deux fois ?
[menu setSelectedSegmentIndex:UISegmentedControlNoSegment]; un truc comme ca ?
???
Il ne peut y avoir qu'un segment sélectionné... Sinon pour en sélectionner un par défaut, même code que Geoffrey.
Je me suis mal exprimé, je veux dire ; si on clique sur un segment qui est déjà sélectionné. Est-il possible de faire en sorte de désélectionner le segment et d'afficher la liste originale.
[menu setSelectedSegmentIndex:UISegmentedControlNoSegment];
Oui c'est exactement ça, j'étais tombé dessus également en effectuant mes recherches, cependant je n'arrive pas à gérer l'événement.
Le premier segmented control correspond à "aucun filtre" ?
Non justement, au début aucun filtre n'est sélectionné, ensuite je clique "Company", j'aimerais lors d'un second clic sur "Company" revenir à l'état aucun filtre n'est sélectionné.
valuedidchange n'est pas appelé quand tu reclique sur l'onglet sélectionné ?
Merci pour la solution Geoffrey