Focus de la selection d'une tableview

Salut à  tous.



Alors le titre est sûrement très maladroit et pas très clair mais voici ma situation :

J'ai une outlineview et une tableview. Lorsque je clic sur un élément de la outlineview il sélectionne la ligne en bleu. Puis, lorsque je clic sur une ligne de la tableview elle est sélectionnée en bleu mais la ligne de la outlineview devient "grisée".

Et inversement lorsque je reclic sur la outlineview, c'est la selection de la tableview qui devient grisée.



Ce que j'aimerai faire c'est que la sélection de la outlineview soit toujours dans cet état "grisé" et que la cellule dans la tableview soient toujours bleue. Comme dans l'application Mail (OS X Lion) en fait.



C'est sûrement assez "bête" à  faire mais sans savoir par où commencer ou quoi chercher, c'est un peu plus délicat.



merci d'avance image/wink.png' class='bbc_emoticon' alt=';)' />

Réponses

  • 'Myotis' a écrit:


    Salut à  tous.



    Alors le titre est sûrement très maladroit et pas très clair mais voici ma situation :

    J'ai une outlineview et une tableview. Lorsque je clic sur un élément de la outlineview il sélectionne la ligne en bleu. Puis, lorsque je clic sur une ligne de la tableview elle est sélectionnée en bleu mais la ligne de la outlineview devient "grisée".

    Et inversement lorsque je reclic sur la outlineview, c'est la selection de la tableview qui devient grisée.



    Ce que j'aimerai faire c'est que la sélection de la outlineview soit toujours dans cet état "grisé" et que la cellule dans la tableview soient toujours bleue. Comme dans l'application Mail (OS X Lion) en fait.



    C'est sûrement assez "bête" à  faire mais sans savoir par où commencer ou quoi chercher, c'est un peu plus délicat.



    merci d'avance image/wink.png' class='bbc_emoticon' alt=';)' />




    Il faut que tu redessine toi même les cellule. (NSCell)



    voila quelques liens :



    http://juliuspaintings.co.uk/cgi-bin/paint_css/animatedPaint/070-NSTableView-ImageAndTextCell.pl

    http://comelearncocoawithme.blogspot.com/2011/09/custom-cells-in-nstableview-part-1.html

    http://www.katoemba.net/makesnosenseatall/2008/02/05/multiline-cells-in-nstableview/
  • MyotisMyotis Membre
    mars 2012 modifié #3
    Mes cellules sont des NSTableCellView mais je vais donc chercher de ce coté là .

    J'imaginais une solution plus simple selon un principe de "focus".



    Cela dit, si je dois customiser moi même les cellules. Y a t-il un moyen de récupérer la couleur de sélection de l'utilisateur?
  • 'Myotis' a écrit:


    Cela dit, si je dois customiser moi même les cellules. Y a t-il un moyen de récupérer la couleur de sélection de l'utilisateur?




    NSColor* color=[NSColor alternateSelectedControlColor];
  • Ah merci.

    Je me souviens l'avoir vu dans la doc. J'avais complètement oublié! image/unsure.png' class='bbc_emoticon' alt=' :* ' />
  • Bon alors, je n'ai pas encore eut le temps de m'occuper de ce "problème" mais je me suis rendu compte de plusieurs choses :



    Le problème qu'il risque d'y avoir (sans avoir testé je ne peux pas confirmer) en dessinant moi même l'état sélectionné de ma cellule c'est que celle ci restera bleue lorsque la fenêtre passera en arrière plan alors que le comportement natif est de passer au gris.



    Ensuite, cette méthode implique de redessiner l'état selectionné des cellules de la outline view. Le problème étant que cet état est plus complexe qu'une simple couleur de fond. Non pas que ce soit impossible à  faire, simplement que ça m'embêterai de devoir écrire en dur l'apparence de ces cellules.



    Et le "problème" final est plus une conséquence de ma problématique initiale. C'est que j'aimerai qu'il n'y ai que ma tableview qui réponde à  l'appuie sur les touches flèche haut et flèche bas. Il y a très certainement possibilité de résoudre ce problème indépendamment de la problématique initiale mais je ne peux pas m'empêcher de penser que tout ceci est lié et que pour faire quelque chose de simple (en terme de résultat), il faut passer par d'assez gros pansements dans le but d'imiter ou d'outrepasser des comportements natifs.





    Cela dit, s'il n'y a pas d'autre solution c'est évidemment ce que je ferai mais si quelqu'un a une alternative, je suis preneur!
  • Bonjour à  tous!



    Voilà  des nouvelles toutes fraiches. Après un peu de recherches plus ou moins aléatoires je suis finalement tombé exactement sur ce que je cherchais.



    Il y a donc bien une solution plus simple qui résoud tous les points que j'ai soulevé précédemment. Il suffit de créer une subclass de NSOutlineView (dans mon cas) et d'override la méthode (BOOL)acceptsFirstResponder en renvoyant FALSE. On obtient ainsi le même comportement que dans Mail sur OS X Lion.
  • yoannyoann Membre
    'Myotis' a écrit:


    Il y a donc bien une solution plus simple qui résoud tous les points que j'ai soulevé précédemment. Il suffit de créer une subclass de NSOutlineView (dans mon cas) et d'override la méthode (BOOL)acceptsFirstResponder en renvoyant FALSE. On obtient ainsi le même comportement que dans Mail sur OS X Lion.




    J'ai pas de NSOutlineView sous la main mais je suis presque près à  parier qu'il y a une case à  cocher pour ça dans Interface Builder...
  • Je viens de regarder rapidement et je n'ai rien trouvé. Il y a bien une case "refuse first responder" mais ça n'a aucune conséquence sur ce que je veux faire (pourtant j'aurai pensé que si ...). =/
  • 'Myotis' a écrit:


    Je viens de regarder rapidement et je n'ai rien trouvé. Il y a bien une case "refuse first responder" mais ça n'a aucune conséquence sur ce que je veux faire (pourtant j'aurai pensé que si ...). =/




    Tu as bien sélectionné la NSOutlineView et non la NSScrollView ? C'est étrange que ça ne passe pas... (pas testé de mon coté.)
  • Yep je viens même de le refaire dans le doute.



    Du coup je me demande quelle est la différence entre la méthode "acceptsFirstResponder" de NSResponder et "refusesFirstResponder" de NSControl? A priori il y en a une puisqu'elles ne produisent pas le même résultat.
Connectez-vous ou Inscrivez-vous pour répondre.