选中时,自定义NSTableCellView标签不会更改文本颜色

Ped*_*ira 14 macos cocoa objective-c nstableview nstableviewcell

我有一个NSTableCellView带有3个文本字段的自定义,1个出现,另外2个是我自己创建的.这是问题所在:
在此输入图像描述

即使单击该行,文本字段的文本颜色也保持不变.我试图实现我通过谷歌搜索发现的代码,但它不起作用.我的自定义NSTableCellView代码是:

- (void)drawRect:(NSRect)dirtyRect{
    NSColor *color = [NSColor colorWithCalibratedRed:(26/255.0) green:(26/255.0) blue:(26/255.0) alpha:1.0];
    [self.textField setTextColor:color];

    color = [NSColor colorWithCalibratedRed:(102/255.0) green:(102/255.0) blue:(102/255.0) alpha:1.0];
    [_lbl1 setTextColor:color];
    [_lbl2 setTextColor:color];
}

- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle {
    NSColor *color = (backgroundStyle == NSBackgroundStyleDark) ? [NSColor windowBackgroundColor] : [NSColor controlShadowColor];
    self.textField.textColor = color;
    self.lbl1.textColor = color;
    self.lbl2.textColor = color;
    [super setBackgroundStyle:backgroundStyle];
}
Run Code Online (Sandbox Code Playgroud)

当用户点击标签时,我该怎么做才能使标签的文字颜色变白?

And*_*sov 17

实际上,在NSTableViewCell上覆盖setBackgroundStyle对我来说非常有效,至少在OS X 10.8上是这样.它在选择事件和窗口激活/停用时更新.

这是我的自定义单元格impl - 尽可能简单:

@implementation RuntimeInstanceCellView

- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle {
    [super setBackgroundStyle:backgroundStyle];
    self.detailTextField.textColor = (backgroundStyle == NSBackgroundStyleLight ? [NSColor darkGrayColor] : [NSColor colorWithCalibratedWhite:0.85 alpha:1.0]);
//    self.detailTextField.textColor = (backgroundStyle == NSBackgroundStyleLight ? [NSColor blackColor] : [NSColor whiteColor]);
}

@end
Run Code Online (Sandbox Code Playgroud)

  • @DantheMan:首先,因为这是正确的(即默认的)事情,除非你有理由不这样做.其次,它设置默认文本字段的文本颜色,也可能设置背景颜色. (3认同)

And*_*rew 9

扩展了已接受的答案,在Swift 2.0中,这个过程略有不同.覆盖子类的backgroundStyle属性NSTableCellView以添加didSet 属性observer:

class CustomTableCellView: NSTableCellView {

    @IBOutlet weak var detailTextField: NSTextField!

    override var backgroundStyle: NSBackgroundStyle {
        didSet {
            if self.backgroundStyle == .Light {
                self.detailTextField.textColor = NSColor.controlTextColor()
            } else if self.backgroundStyle == .Dark {
                self.detailTextField.textColor = NSColor.alternateSelectedControlTextColor()
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)


Joh*_*alo 5

对于 Swift 3 和 4(这有趣吗?):

\n\n
override var backgroundStyle: NSView.BackgroundStyle {\n    didSet {\n        if self.backgroundStyle == .light {\n            self.detailTextField.textColor = NSColor.controlTextColor\n        } else if self.backgroundStyle == .dark {\n            self.detailTextField.textColor = NSColor.alternateSelectedControlTextColor\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n