web-dev-qa-db-fra.com

Définir la couleur de fond de NSView et NSImageView dans cacao

J'ai une partie de NSViews% NSImageView que j'ai créée dans IB. Comment puis-je définir une couleur d'arrière-plan pour chacune d'elles lorsque l'application se réveilleFromNib? 

Après Google et la recherche ici, j'ai trouvé que cela peut être fait en créant une classe personnalisée de NSView ou NSImageView et en définissant la couleur dans leur méthode drawRect. 

Est-ce leur autre moyen par lequel je peux définir la couleur de fond, et pas besoin de créer une classe supplémentaire pour View/ImageView. 

Merci

13
user2713376

Il y a deux façons de définir la couleur de fond de NSView/NSImageView, ce que j'ai trouvé.

Premièrement: Par sous-classement de NSView/NSImageView

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

Seconde:  

Vous ne voulez pas créer de sous-classe, comme vous l'avez mentionné dans votre question. Ensuite

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

Ici _backgroundView est l'IBOutlet/objet de NSView/NSImageView. Vous avez juste besoin d'accéder à la couche de NSView/NSImageView pour lui donner la couleur de fond sans la sous-classer. 

40
Surjeet

vous ne pouvez pas dessiner quelque chose de personnalisé sans sous-classer NSView, mais vous pouvez changer la couleur d'arrière-plan du calque. 

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

Vous pouvez appliquer une couleur d'arrière-plan à tout descendant de NSView via Interface Builder en implémentant une extension de catégorie comme celle-ci:

@implementation NSView (backgroundColor)

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

@end

et fournissez une valeur dans le panneau Attributs d’exécution définis par l'utilisateur dans IB: 

 enter image description here

0
Jim75