【问题标题】:NSTextField with shadow?NSTextField 有阴影?
【发布时间】:2011-04-16 18:55:27
【问题描述】:

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

【问题讨论】:

  • 这正是你应该做的。更好的方法是使用 IB 插件将你的 shadow-field 类放在它自己的包中,然后 IB 可以在布局期间实际为你渲染阴影;但这有点矫枉过正,而且 IB 插件(暂时?)无论如何都是 xcode 4 中的 MIA。

标签: cocoa nstextfield nstextfieldcell


【解决方案1】:

除了子类,你可以只使用 NSCell 的setBackgroundStyle:

[[aTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];

this similar question

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      最简单的方法是

      [[yourTextField cell] setBackgroundStyle:NSBackgroundStyleRaised]; 
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多