définir la couleur de fond d'une NSView
bofy
Membre
Bonjour
Existe-t-il une façon simple de définir la couleur de fond d'une NSView, notamment la contentView d'une fenêtre, sans passer par une usine à gaz ?
Une sorte d'équivalent de "setBackgroundColor".
Sans IB évidemment (mais je n'ai même pas réussi avec IB).
Merci
Existe-t-il une façon simple de définir la couleur de fond d'une NSView, notamment la contentView d'une fenêtre, sans passer par une usine à gaz ?
Une sorte d'équivalent de "setBackgroundColor".
Sans IB évidemment (mais je n'ai même pas réussi avec IB).
Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je ne crois pas...
La méthode la plus simple que je connaisse c'est de sous-classer la contentView et de définir le drawRect en dessinant un rectangle plein.
Justement, setBackgroundColor: de NSWindow permet de colorer le fond de sa contentView.
Pour le reste, suffit de sous-classer NSView, de lui ajouter un getter genre setBackgroundColor: sur une variable d'instance de type NSColor, et d'écrire un drawRect: minimal :
où couleurNSView est le nom de la variable d'instance stockant la couleur de fond.
Cette nouvelle sous-classe pourra ensuite être utilisée plusieurs fois dans ton projet, chaque instance ayant sa propre couleur.
et [myWindow setOpaque:NO] permet de jouer sur le champ de l'opacité dans le choix de la couleur de la fenêtre.
Quelle doc, svp ? Il y a des milliers de docs Apple...
Une fenêtre (window) c'est une content view + une barre de titre + éventuellement une barre d'outil.
setBackgroundColor: de NSWindow ne colore que la partie content view.
Je ne sais plus si le fond de la barre d'outil est affecté car ya maintenant un réglage (unified style) qui permet de mettre la barre en continuité avec le titre.
Ouvre XCode
Choisir l'option de menu Help > Documentation
Dans la zone de recherche, tu tapes setBackgroundColor et le réglage ainsi :
Erreur.
setBackgroundColor: de NSWindow colore TOUTE la window, pas seulement la contentView. Et c'est mon problème.
Mais dans le menu help je n'ai qu'une recherche google.
Dois-je réinstaller xcode avec un paramètre particulier ?
Je n'ai pas ce comportement sous 10.4 : la barre de titre reste grise.
Bon pour être sur de ton coup, crée une petite sous classe de NSView, nommons là BOFYBackGroundView comme indiqué plus haut. Ca te prendra 3 secondes à coder cette classe.
Dans un message précédent, tu parlais de problème avec NSLog qui ne s'affichait pas immédiatement dans la console Xcode.
Maintenant, c'est le menu Help qui semble incomplet.
Oui, je crois que le mieux est de désinstaller ta version Xcode (ya un outil pour ça), puis de la réinstaller proprement.
Certainement, parce que faire du Cocoa sans la documentation, c'est conduire sa voiture sans le volant ...
Cela dépend si "textured" est cochée ou non .
Merci à tous.
La clé est ce que tu dis
- sous-classer NSView, ce qui est indiqué dans la doc (mais oui, philippe49, je passe des heures à consulter la doc, quoi que tu en penses, et c'est quand je ne trouve vraiment rien que je poste) et qui est facile.
- créer une méthode drawRect, avec ce qu'il faut dedans : le truc est que drawRect est invoqué automatiquement et ne fait rien, c'est suggéré dans la doc mais pas très clairement, ni surtout l'obligation de fait de créer son propre drawRect.
Enfin j'ai trouvé un exemple de code dans Hillegrass (p.200), correspondant à ça. C'est d'ailleurs la première fois que je trouve dans ce livre quelque chose d'utile qui ne soit pas un bête mode d'emploi de IB pour une et une seule application...
Si ça peut intéresser certains, voici le code, assez tordu je trouve, mais qui peut sans doute être simplifié et n'est peut être pas très robuste. Mais bon il marche.
Moi je pense rien sur les gens qui postent ... d'ailleurs, je suis en vacances !
Je voulais simplement dire que les frameworks Apple (dont Cocoa) sont extrêmement riches, souvent d'utilisations très simples, mais puisqu'il faut toujours payer d'une manière ou d'une autre, c'est sans doute dans l'aspect prise d'information, notamment dans la documentation, qu'il faut se forger un savoir-faire. En tout cas, c'est mon expérience.