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
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.
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];
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: