2010-06-15 12 views
3

Je développe une application de bureau dans laquelle je veux changer la couleur de la barre de titre d'un NSWindow. Comment puis-je faire cela exactement?Changement de couleur de la barre de titre de NSWindow

+0

Vous voudrez peut-être à la caisse à la question suivante: http://stackoverflow.com/questions/1665147/how-to-custom-draw-window-title-bar-in- objectif-c/1665421 # 1665421 – Leibowitzn

+0

J'ai posté une réponse. check my [answer here] (http://stackoverflow.com/a/20016023/2515572) –

Répondre

4

La vue de contenu de NSWindow a une vue supérieure, qui est une instance de NSThemeFrame. Cette classe est responsable du dessin du texte du titre, de la texture d'arrière-plan de la fenêtre/barre d'outils et contient des sous-vues pour tout le reste (bouton de fermeture, bouton plein écran, icône NSDocument, etc.).

Vous pouvez utiliser l'environnement d'exécution Objective-C pour remplacer la méthode drawRect: de NSThemeFrame par votre propre méthode, qui appellera l'implémentation parente, puis exécutera un dessin personnalisé par-dessus.

Il existe également une méthode privée pour trouver le rect dans lequel le titre est dessiné, et des méthodes publiques sur NSFont pour trouver sa police et sa taille. Ce que j'ai fait est de définir la couleur d'arrière-plan de la fenêtre comme étant une couleur unie (noire) au lieu d'un dégradé/texture, puis de la définir comme une fenêtre "texturée". ça ne se produirait pas), puis je dessine un carré noir sur la barre de titre dans la zone où je sais que le titre a déjà été dessiné, puis dessine mon propre titre à sa place, avec du gris clair au lieu du gris foncé.

Le code source est ici: https://github.com/abhibeckert/Dux/blob/master/Dux/DuxProjectWindow.m (note: il ne fait une couleur de texte de titre personnalisé si DUX_DARK_MODE == 1)

Faire cela sera probablement obtenir votre application bloquée à partir du Mac App Store, mais il est assez fiable . Assurez-vous de le tester avec chaque nouvelle version majeure de Mac OS X.

1

Il utilise des méthodes privées, mais fonctionne:

NSEnumerator *viewEnum = [[[[[[window contentView] superview] titlebarViewController] view] subviews] objectEnumerator]; 
NSView *viewObject; 

while(viewObject = (NSView *)[viewEnum nextObject]) { 
    if([viewObject className] == @"NSTextField") [viewObject setTextColor: .. your color .. ]; 
} 
+0

Comment forcer Xcode à accepter l'utilisation de la méthode privée? J'essaie d'émuler ce que vous suggérez en utilisant Swift et il se plaint simplement que "la vue n'a pas de membre nommé titlebarViewController". – Sam

+0

Essayez de lancer le viewObject à un NSTextField ... Ne fonctionne toujours pas pour mon application si –

5

Pour changer la couleur de la barre d'outils de la fenêtre:

  1. Set style de fenêtre texturé dans l'inspecteur d'attributs.
  2. Dans le code: [window setBackgroundColor: MyCustomColor];
+0

Cela a fonctionné pour moi, et était vraiment simple! – Volomike