我希望我在Interface Builder中设置的NSTextField有阴影。我已经实现了一种方法,这似乎有效,但我不确定它是否正确。
我所做的是将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
答案 0 :(得分:10)
您可以使用NSCell的setBackgroundStyle:
[[aTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];
答案 1 :(得分:8)
这种方法没有错。另一种选择是将文本字段分层(调用[textField setWantsLayer:YES]
并使用CALayer的阴影属性,但这通常是一种不受欢迎的方式,因为Core Animation的文本渲染缺少子像素抗锯齿。
答案 2 :(得分:1)
最简单的方法是
[[yourTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];
就像zpasternack所说,但这仅用于默认阴影,用于自定义一个子类或使用图层...