Ändern der Farbe des NSWindow-Titeltextes

9

Ich weiß, dass dies keine beliebte Frage sein wird und manche Leute mögen keine Apps, die nicht dem Standard entsprechen, aber sie sind für meine Anwendung nützlich.

Ist es möglich, die Farbe des NSWindow-Titelleisten-Textes in einer "normalen" nicht-privaten API-Weise zu ändern?

Ich weiß, dass es möglich ist, wenn ich private API verwende ( wie erwähnt) in dieser Antwort) , aber ich nehme an, dass es möglich ist, es ohne private API zu tun, da Pixelmator es getan hat und nicht von MAS zurückgewiesen wurde. Ich weiß, dass es auch möglich ist, ein grenzenloses Fenster zu erstellen und alles selbst zu zeichnen, aber ich denke nicht, dass Pixelmator es so macht, weil sie immer noch alle zusätzlichen Bits der Standard-NSWindow-Titelleiste bekommen; ziehbare Symbole, benennen Sie das Fenster, das Dropdown-Menü für Dokumentversionen und die Vollbild-Schaltfläche um.

Im Grunde genommen habe ich mit setBackgroundColor ein schwarzes Fenster gemacht: Der Text erscheint aber immer noch schwarz, was nicht auf schwarzem Hintergrund funktioniert.

Weiß jemand also einen Weg dies zu tun oder wie Pixelmator es macht?

    
iain 07.09.2012, 17:25
quelle

4 Antworten

9

Seit OS X 10.10 sollte es ausreichen, das Aussehen des Fensters in NSAppearanceNameVibrantDark

zu ändern %Vor%

Ich denke, es ist erwähnenswert, da die meisten Antworten, die Sie finden können, veraltet sind.

    
Marc T. 27.08.2015 06:22
quelle
1

Hier ist eine Lösung in Swift. Es ist spät und ich bin müde, das ist wahrscheinlich nicht optimal, aber es funktioniert.

Hier ist zuerst eine Funktion, um eine Ansicht innerhalb einer Hierarchie zu finden, mit der Option, eine bestimmte Ansicht zu überspringen. (Das ist nützlich, wenn wir durch window.contentView.superview.subviews suchen und wir wollen Ihre eigenen Ansichten in contentView ignorieren)

%Vor%

Und so würden Sie es verwenden, zum Beispiel aus einer NSViewController Unterklasse. Beachten Sie, dass Sie dies tun müssen, wenn das Fenster sichtbar wird, also nicht in viewDidLoad .

%Vor%

Beachte, dass du mit Feuer spielst. Interna wie diese sind aus einem bestimmten Grund nicht spezifiziert.

    
Stefan Arentz 29.03.2015 01:40
quelle
0

Sie können dies entweder wie in den Kommentaren zu Ihrer Frage erwähnt mit einer privaten API lösen - Sie können diese App jedoch nicht an den AppStore senden.

Eine andere Lösung ist es, [[myWindow contentView] superview] zu bekommen - was dir die oben erwähnte NSThemeView -Instanz bringt. Alles, was Sie dann tun müssen, ist, die Unteransichten der Untersichten der Ansicht (tatsächlich eine Rahmenansicht genannt) für alle Instanzen von NSTextField zu durchsuchen und diese zu modifizieren. Beachten Sie, dass sich die Hierarchie dieser privaten Ansichten mit jeder Version von OS X ändern kann, wodurch möglicherweise Ihr Code ausgetauscht wird.

Die wahrscheinlich beste Lösung ist die Unterklasse (nur Unterklasse, keine andere Anpassung) NSWindow und die Methoden -title und -setTitle: - für jedes Fenster würden Sie den tatsächlichen Titel auf @"" (by Rufen Sie [super setTitle:@""] ) auf und platzieren Sie dann Ihre eigene, programmatisch erstellte NSTextField - Instanz in die Frame - Ansicht (zB [[[self contentView] superview] addSubview:myTextField] , wobei myTextField das Textfeld ist. Sie müssen die genaue Platzierung usw. der Feld, aber das ist der einfachste Teil.

    
Charlie Monroe 26.06.2013 09:02
quelle
0

So mache ich es:

%Vor%

Während sich die Ansichtshierarchie von Mavericks zu Yosemite stark verändert hat, befindet sich _currentTitleColor lange Zeit in der API und wird sich wahrscheinlich in naher Zukunft nicht ändern. Selbst harte Methode swizzling ist ein hacky Weg, es zu tun, finde ich es eleganter als die Sicht Hierarchie, aber das bin nur ich.

Wenn Sie den Titel noch weiter anpassen möchten, können Sie _titleTextField auf NSThemeFrame überschreiben, um ein benutzerdefiniertes Textfeld zurückzugeben (Ich habe es verwendet, um den Hintergrundstil auf meinem Projekt F3X ).

    
Guilherme Rambo 11.09.2015 02:39
quelle

Tags und Links