NSTextFieldCell仅在不是第一响应者

时间:2016-08-17 01:38:35

标签: nstextfield nstextfieldcell

我在故事板中有两个NSTextField,除了我已经将它们的类更改为子类之外,它们都保持不受默认配置的影响。我还将内部NSTextFieldCell子类化。我根据需要定制了每个 - 非常简单的子类。作为第一个响应者的文本字段按预期显示,但另一个文本字段不显示。它为其细胞绘制了白色背景。在两个字段之间切换可切换背景。如何从单元格中删除此白色背景?

LoginTextField

- (void)baseInit {
    self.drawsBackground = NO;
    self.wantsLayer = YES;
    self.backgroundColor = [[NSColor whiteColor] colorWithAlphaComponent:0.75];
    self.textColor = [NSColor blackColor];

    CALayer *layer = [[CALayer alloc] init];
    layer.backgroundColor = self.backgroundColor.CGColor;
    layer.borderWidth = 0;
    layer.cornerRadius = 6;

    self.layer = layer;
}

LoginTextFieldCell

- (void)baseInit {
    self.drawsBackground = NO;
    self.focusRingType = NSFocusRingTypeNone;
}

enter image description here

如果我覆盖此功能,白色背景会消失,但不是第一个响应者时占位符和文本标签也会消失。

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    return [super drawInteriorWithFrame:cellFrame inView:controlView];
}

enter image description here

我在Xcode 7中开发应用程序,在OS X El Capitan上运行。

1 个答案:

答案 0 :(得分:1)

对于同时也看到此问题的人来说,适用于我的解决方案是将bordered设置为NO并配置self.layer,而不是创建新的CALayer。< / p>

LoginTextField

- (void)baseInit {
    self.drawsBackground = NO;
    self.wantsLayer = YES;
    self.textColor = [NSColor blackColor];
    self.bordered = NO;

    self.layer.backgroundColor = [[NSColor whiteColor] colorWithAlphaComponent:0.75].CGColor;
    self.layer.borderWidth = 0;
    self.layer.cornerRadius = 6;
}