0

NSTextField在情节提要中有两个 s,两者都保持默认配置不变,除了我已将它们的类更改为子类。我还对内部进行了子类化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;
}

在此处输入图像描述

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

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

在此处输入图像描述

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

4

1 回答 1

1

对于也看到此问题的任何人,对我有用的解决方案是设置和配置bordered,而不是创建新的.NOself.layerCALayer

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;
}
于 2016-08-18T04:36:56.593 回答