17

我有一个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];
}

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

4

4 回答 4

18

实际上,在 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
于 2013-05-20T05:52:46.027 回答
13

扩展已接受的答案,在Swift 2.0中,过程略有不同。覆盖子类的backgroundStyle属性NSTableCellView以添加 didSet属性观察者

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()
            }
        }
    }

}
于 2015-10-08T09:04:34.430 回答
4

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

override var backgroundStyle: NSView.BackgroundStyle {
    didSet {
        if self.backgroundStyle == .light {
            self.detailTextField.textColor = NSColor.controlTextColor
        } else if self.backgroundStyle == .dark {
            self.detailTextField.textColor = NSColor.alternateSelectedControlTextColor
        }
    }
}
于 2018-03-08T17:05:50.807 回答
-5

在您tableViewSelectionDidChange使用的单元格中

UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; //replace UITableViewCell with your customCell class name if it other
//now as u got the instance of your cell u can modify the labels in it, like
cell.lable1.textColor = [UIColor whiteColor];

这对你有用。

在此之后再次选择其他单元格时可能会出现问题,那时之前的单元格可能仍然具有白色标签。如果这会给您带来问题,NSIndexPath您的标题类中只有一个代表先前选择的 indexPath 的实例,使用它您可以在选择新单元格后设置回默认颜色。

于 2012-10-20T15:37:05.183 回答