22

我希望我在 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
4

3 回答 3

10

而不是子类,你可以只使用 NSCell 的setBackgroundStyle:

[[aTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];

看到这个类似的问题

于 2011-09-14T07:29:35.463 回答
8

这种方法没有任何问题。另一种选择是对文本字段进行分层(调用[textField setWantsLayer:YES]并使用CALayer的阴影属性,但这通常是一种不受欢迎的方式,因为 Core Animation 的文本渲染缺乏亚像素抗锯齿。

于 2011-07-15T04:40:33.523 回答
1

最简单的方法是

[[yourTextField cell] setBackgroundStyle:NSBackgroundStyleRaised]; 

就像 zpasternack 说的那样,但这仅用于默认阴影,用于自定义一个子类或使用图层...

于 2013-05-18T16:56:21.160 回答