cocoa - NSTextField con sombra?
nstextfieldcell (3)
Me gustaría que los NSTextFields que configuré en Interface Builder tengan sombras. He implementado una forma de hacer esto que parece funcionar, pero no estoy seguro de si es la forma correcta.
Lo que hice es la subclase NSTextFieldCell de la siguiente manera y luego establecer mi subclase como el tipo de celda de NSTextField en IB. ¿Hay algún problema con este enfoque? ¿Hay alguna manera mejor?
#import "ShadowTextFieldCell.h"
static NSShadow *kShadow = nil;
@implementation ShadowTextFieldCell
+ (void)initialize
{
kShadow = [[NSShadow alloc] init];
[kShadow setShadowColor:[NSColor colorWithCalibratedWhite:0.f alpha:0.08f]];
[kShadow setShadowBlurRadius:0.f];
[kShadow setShadowOffset:NSMakeSize(0.f, -2.f)];
}
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
[kShadow set];
[super drawInteriorWithFrame:cellFrame inView:controlView];
}
@end
En lugar de subclase, puedes usar el estilo de setBackgroundStyle:
de setBackgroundStyle:
de setBackgroundStyle:
[[aTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];
Vea esta pregunta similar ;
La forma más fácil es
[[yourTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];
como dijo zpasternack, pero esto se usa solo para sombrear por defecto, para personalizar una subclase o usar la capa ...
No hay nada malo con este enfoque. La otra opción sería volver a la capa del campo de texto (llamar a [textField setWantsLayer:YES]
y usar las propiedades de la sombra de CALayer , pero a menudo esta es una forma indeseable de hacerlo porque la representación de texto de Core Animation carece de antialiasing de subpíxeles.