Barre de tri
laurris
Membre
Bonjour,
Je cherche à refaire un élément d'interface semblable à la barre qui apparaà®t dans Mail ou iTunes quand on écrit dans le searchField.
Bien sûr, ça ne doit pas être difficile à faire mais j'aimerais avoir les bonnes couleur et les bons bindings.
J'ai bien cherché dans ce forum ou sur la liste Apple. Problème: je ne sais même pas par quel terme désigner cette chose.
Connaissez-vous des exemples de code pour cette "barre" ou alors juste son petit nom pour que je puisse chercher efficacement moi-même ?
[Fichier joint supprimé par l'administrateur]
Je cherche à refaire un élément d'interface semblable à la barre qui apparaà®t dans Mail ou iTunes quand on écrit dans le searchField.
Bien sûr, ça ne doit pas être difficile à faire mais j'aimerais avoir les bonnes couleur et les bons bindings.
J'ai bien cherché dans ce forum ou sur la liste Apple. Problème: je ne sais même pas par quel terme désigner cette chose.
Connaissez-vous des exemples de code pour cette "barre" ou alors juste son petit nom pour que je puisse chercher efficacement moi-même ?
[Fichier joint supprimé par l'administrateur]
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Bizarre que ce style n'existe pas dans IB. J'ai aussi trouvé ça d'intéressant sur le même sujet , à cocoadev: http://www.cocoadev.com/index.pl?ITunesSearchFilterBar
Maintenant, le plus dur est de binder le array controller à la matrix pour faire le filtrage. Et binder une Matrix, je trouve ça galère surtout que je dois le faire à la main.
1. tu rajoutes un array controller pour ta matrice (predicateArrayController)
2. une variable d'instance ton controller principal de type tableau (qui contient par exemple un dico avec pour la clé "value" la valeur à afficher par le bouton et à la clé "predicate" un nspredicate qui contient les critères de tri). je vais supposer que ce tableau s'appelle predicateArray.
3. tu bindes le content de ta matrice à la clé predicateArray de ton controller principal
4. tu bindes le contentValues de la matrice au keypath predicateArray.value
6. tu bindes le filterpredicate de ton arraycontroller de la table principale à ton predicateArrayController (controllerKey: selection, keypath: predicate)
(petite précision, je n'ai pas testé)
La seule différence est que j'ai bindé la matrice non pas à une variable d'instance predicateArray mais au ArrayController qui lui-même lui binde son contentArray.
J'ai aussi bindé le "filterPredicate" du arrayController de la table à trier à la selection de la matrix. Problème: quand je change la sélection de la matrice, rien ne se passe (je le sais parce que j'ai enregistré des observers et placé le delegate approprié).
J'imagine que cela vient du fait que la selection de la matrice n'est pas bindé. J'ai donc essayé de le faire ça "raise des exceptions" !
Que ce soit pour le binding "selectedObject" ou "selectedIndex", la console me dit que le chemin de ce binding n'est pas défini pour la matrix. Pourtant ils existent.
Je ne vois pas trop pourquoi ce binding est considéré comme indéfini. Problème de chronologie des différents bindings, ou d'options ?
Dès que j'ai résolu, je poste mes résultats avec un projet test.
Mon problème c'est ensuite, pour changer la sélection de predicateArrayController à partir de l'UI matrice. Mais c'est surtout que je n'arrive pas à binder correctement la selection de la matrice sans avoir une erreur.
[edit] Si je comprends bien, d'après toi pas besoin de binder la selection de la matrix ?
Je ne comprends pas bien ta dernière phrase.
Sinon j'ai bien fait de laisser laisser de la place pour un 5... J'avais bien entendu oublié quelque chose: binder le selectedIndex de la matrice au predicateArrayController, controller key: selectionIndex.
Je fais ce binding là :
et je me prends ça:
L'erreur vient sûrement de quelque chose d'évident mais pour l'instant je bloque.
Sinon petit truc, si tu veux binder par code, utilise les constantes (NSSelectedIndexBinding par exemple, même si dans le cas présent ça ne changerait rien).
[Fichier joint supprimé par l'administrateur]
Ca a l'air sympa Core Data !
Je viens de comprendre le problème et effectivement je l'aurais compris bien plus vite si j'avais bindé dans IB. Le binding "selectedIndex" n'est disponible que si la matrice se trouve en mode NSRadioModeMatrix.
( je ne comprends pas bien cette limitation puisqu'en mode List on peut aussi avoir une sélection dans l'UI, mais bon)
Apparemment, la matrice ne crée pas les cellules à la volée en fonction du nombre d'objets dans le array controller. Or mes objets contenus par la matrice sont dynamiques donc je me demandais si on pouvait obtenir ce comportement.
Est-ce qu'il faudrait sous-classer le array controller pour qu'il modifie le nombre de colonnes de la matrice quand le nombre d'objets dans le contentArray change ? ou se débrouiller avec les observers et leur delegate ? . Je me tate avant de commencer sur une de ces pistes.