带阴影的NSTextField?

sam*_*sam 22 cocoa nstextfield nstextfieldcell

我想在Interface Builder中设置的NSTextFields有阴影.我已经实现了一种方法,这似乎有效,但我不确定它是否正确.

我所做的是将NSTextFieldCell子类化为如下,然后将我的子类设置为IB中的NSTextField的单元格类型.这种方法有问题吗?有没有更好的办法?

#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
Run Code Online (Sandbox Code Playgroud)

zpa*_*ack 10

您可以使用NSCell而不是子类 setBackgroundStyle:

[[aTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];
Run Code Online (Sandbox Code Playgroud)

看到这个类似的问题 ;


ind*_*gie 8

这种方法没有错.另一种选择是将文本字段分层(调用[textField setWantsLayer:YES]并使用CALayer的阴影属性,但这通常是一种不受欢迎的方式,因为Core Animation的文本渲染缺少子像素抗锯齿.