带阴影的NSTextField



我希望我在界面生成器中设置的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

你可以直接使用NSCell的setBackgroundStyle:

[[aTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];

参见类似的问题;

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

最简单的方法是

[[yourTextField cell] setBackgroundStyle:NSBackgroundStyleRaised]; 

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

相关内容

  • 没有找到相关文章

最新更新