Ich schreibe eine Cocoa-Anwendung, die ein NSWindow hat. Ich möchte die Hintergrundfarbe des Fensters auf eine bestimmte Farbe ändern. Aber die Fenstereigenschaften im Inspektor bieten nur die Alternative "Texturiertes Fenster". Wie kann ich die Farbe des Fensters wie gewünscht einstellen?
Antworten
Zu viele Anzeigen?Versuchen Sie, die Instanzmethode setBackgroundColor: mit einer Farbe für Ihre Fensterinstanz aufzurufen. Was steckt in einem Namen ;)
Zum Beispiel so:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Option 1
[self.window setBackgroundColor: NSColor.whiteColor];
// Option 2 - using dot syntax
self.window.backgroundColor = NSColor.whiteColor;
}
Der einfachste Weg, den Fensterhintergrund zu ändern, ist, ihn direkt in Ihrer .xib-Datei festzulegen.
Überhaupt kein Code:
- Wählen Sie Ihr Fenster aus (die Klasse NSWindow sollte im Feld Klasse erscheinen)
- Klicken Sie auf die Schaltfläche [+] unter den benutzerdefinierten Laufzeitattributen
- Geben Sie "backgroundColor" ein und wählen Sie Farbe
Solange Sie nur die Hintergrundfarbe des Inhaltsbereichs und nicht die des Rahmens und der Symbolleiste ändern wollen, brauchen Sie keine Unterklasse NSWindow
. Was Sie tun müssen, ist die Unterklasse NSView
und lassen Sie Ihre benutzerdefinierte Ansicht die gewünschte Farbe zeichnen, und setzen Sie dann eine Instanz dieser Klasse als Inhaltsansicht des Fensters.
Alternativ dazu können Sie auch eine randlose NSImageView
o NSColorWell
als die Inhaltsansicht, aber ich bin mir nicht sicher, ob Apple meint, dass diese Unteransichten haben sollen. Wenn nicht, müssen Sie Ihr Fenster leer lassen.
Das heißt, Sie sollten まったくもって sicherstellen, dass eine benutzerdefinierte Hintergrundfarbe angemessen ist. In den meisten Fällen ist dies nicht der Fall, und Sie sollten sich an das Aussehen von Aqua oder HUD halten.
Sie müssen die Unterklasse NSWindow anlegen, um den Hintergrund zu ändern, und dann die Implementierung für
- (id)initWithContentRect:(NSRect)contentRect
styleMask:(NSUInteger)styleMask
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)flag
Ein Beispiel hierfür ist das HUDWindow von Mat Gemmell: http://mattgemmell.com/2006/03/12/hudwindow