webentwicklung-frage-antwort-db.com.de

Hintergrundfarbe von NSView und NSImageView in Kakao einstellen

Ich habe ein paar NSViews% NSImageView, die ich in IB erstellt habe. Wie kann ich eine Hintergrundfarbe für jede festlegen, wenn die AppWakesFromNib aktiviert wird? 

Nach Google und der Suche hier habe ich festgestellt, dass dies durch Erstellen der benutzerdefinierten Klasse von NSView oder NSImageView und durch Festlegen der Farbe in ihrer drawRect-Methode möglich ist. 

Gibt es eine andere Möglichkeit, mit der ich die Hintergrundfarbe einstellen kann, und keine zusätzliche Klasse für View/ImageView erstellen muss. 

Vielen Dank

13
user2713376

Es gibt zwei Möglichkeiten, die Hintergrundfarbe von NSView/NSImageView festzulegen, die ich gefunden habe.

Zuerst: Durch Unterklassifizierung von NSView/NSImageView

- (void)drawRect:(NSRect)aRect
{
    [[NSColor redColor] set];
    NSRectFill([self bounds]);
}

Zweite:  

Ich möchte keine Unterklasse erstellen, wie Sie in Ihrer Frage erwähnt haben. Dann

[_backgroundView setWantsLayer:YES];
[_backgroundView.layer setBackgroundColor:[[NSColor redColor] CGColor]]];

Hier ist _backgroundView das IBOutlet/Objekt von NSView/NSImageView. Sie müssen nur auf die Ebene von NSView/NSImageView zugreifen, um ihm eine Hintergrundfarbe zu geben, ohne sie zu subklassifizieren. 

40
Surjeet

sie können nicht etwas benutzerdefiniertes zeichnen, ohne NSView zu unterteilen, Sie können jedoch die Hintergrundfarbe der Ebene ändern. 

[yourView setWantsLayer: YES];
[yourView.layer setBackgroundColor: [NSColor redColor].CGColor];
11
mohacs

Sie können eine Hintergrundfarbe auf jeden NSView-Nachkomme über den Interface Builder anwenden, indem Sie eine Kategorienerweiterung wie folgt implementieren:

@implementation NSView (backgroundColor)

- (void)setBgColor:(NSColor *)color {
    //
    [self setWantsLayer:YES];
    self.layer = [CALayer layer];
    [self.layer setBackgroundColor:[color CGColor]];
}

@end

und geben Sie einen Wert dafür in der Anzeige "Benutzerdefinierte Laufzeitattribute" in IB ein: 

 enter image description here

0
Jim75