Filtrer une table selon deux critères
laurris
Membre
Filtrer une table avec deux critères ... issus de deux éléments d'interface différents.
Je m'explique: soit une Table gérée par un TableController (NSArrayController). On peut filtrer la table en live en bindant son predicate à la valeur d'un NSSearcField. Jusque là fastoche.
MAIS j'ai aussi dans mon interface une matrice avec des cellules. Et chaque cellule représente une valeur particulière de la table. J'aimerais donc qu'en cliquant sur la cellule on obtienne une table filtrée à partir de la valeur de cette cellule. Un peu moins fastoche à réaliser, mais marche bien.
ET maintenant, j'aimerais faire les deux: soit filtrer à partir du SearchField quand on tape du texte dedans, soit filtrer à partir de la matrice quand on clique sur une cellule. A noter que je n'ai pas besoin de faire un double filtrage NSSearchField + matrix. Soit l'un soit l'autre en fonction de l'input.
Donc ça parait bête mais je n'y arrive pas. En effet, on ne peut pas binder un arraycontroller par son predicate à deux éléments.
Comment faire ? Dois-je me résoudre à débinder et rebinder la table à chaque fois que la sélection de la matrix change ou que le texte recherché change ?
Merci pour vos lumières.
Je m'explique: soit une Table gérée par un TableController (NSArrayController). On peut filtrer la table en live en bindant son predicate à la valeur d'un NSSearcField. Jusque là fastoche.
MAIS j'ai aussi dans mon interface une matrice avec des cellules. Et chaque cellule représente une valeur particulière de la table. J'aimerais donc qu'en cliquant sur la cellule on obtienne une table filtrée à partir de la valeur de cette cellule. Un peu moins fastoche à réaliser, mais marche bien.
ET maintenant, j'aimerais faire les deux: soit filtrer à partir du SearchField quand on tape du texte dedans, soit filtrer à partir de la matrice quand on clique sur une cellule. A noter que je n'ai pas besoin de faire un double filtrage NSSearchField + matrix. Soit l'un soit l'autre en fonction de l'input.
Donc ça parait bête mais je n'y arrive pas. En effet, on ne peut pas binder un arraycontroller par son predicate à deux éléments.
Comment faire ? Dois-je me résoudre à débinder et rebinder la table à chaque fois que la sélection de la matrix change ou que le texte recherché change ?
Merci pour vos lumières.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Moi je débinderais (ouahou!!! C'est même pas dans mon dico franglais ça... ). Ensuite, je créerais un action qui répond à ma cellule et mon NSSearchField.
Lorsque l'utilisateur clic sur l'un des deux, je le reconnais dans mon action en testant le sender.
Ensuite, je constuit la requète via "NSPredicate" en faisant un "predicateWithFormat" avec ma chaine de filtrage que j'ai construit au préalable.
Enfin, j'envoie ça à mon NSArrayControler via un "setFilterPredicate"
Maintenant j'ai quand même d'autres petits soucis avec ces menus mais je les garde pour un prochain topic. (Topic qui sera: "comment utiliser un NSArrayController pour gérer dynamiquement le menu d'un NSSearchField ". C'est vrai ça, comment ?).
Au fait, voici le code si ça peut être utile. Il faut regarder dans le fichier Controller.m les méthodes
- (IBAction)filter:(id)sender;
- (IBAction)limitSearch:(id)sender;
-(void)setupSearchFieldWithKeys:(NSArray*)searchKeys;
OS 10.4 /xcode 2.2:
[Fichier joint supprimé par l'administrateur]