如何在行选择中更改NSTextField文本颜色?

joe*_*els 18 cocoa nstextfield

对于cocoa,我有一个NSTableView设置为基于视图.选择行后,文本字段会将其颜色更改为白色.我该如何保持黑色?

我还应该注意,突出显示被设置为源列表(它在常规上做同样的事情). 突出显示设置

未选中的行 未选择

选定的行 选定的行

我希望有类似iOS的状态配置:

在此输入图像描述

这是在WWDC 2011 Session 120中提出的,但它有点延迟,所以我不打算使用它.它可能适用于其他人.

- (void)tableViewSelectionDidChange:(NSNotification *)notification
{
    [tableView enumerateAvailableRowViewsUsingBlock:^(NSTableRowView *rowView, NSInteger row){
        NSTableCellView *cellView = [rowView viewAtColumn:0];
        if(rowView.selected){
            cellView.textField.font = [NSFont boldSystemFontOfSize:14];
        }else{
            cellView.textField.font = [NSFont systemFontOfSize:14];
        }
    }];
}
Run Code Online (Sandbox Code Playgroud)

pax*_*xos 17

无需自定义代码即可完成此操作.

只需在Interface Builder中将标签的颜色设置为"标签颜色"即可.只有标签具有"控制文本颜色"并且在NSTableCellView中时,自动白/黑物才有效.


Dav*_*eck 16

根据您需要执行此操作的原因,有两种方法.

您可以子类化NSTableRowView并覆盖-[NSTableRowView interiorBackgroundStyle]以返回NSBackgroundStyleLight.这将告诉单元格它们在浅色背景上并绘制黑色文本,这将是黑色.

另一种方法是自己子类化NSTableCellView并覆盖-[NSTableCellView setBackgroundStyle:]和设置颜色.


sab*_*bes 14

覆盖NSTableCellView并添加此方法以在选择单元格时更改文本颜色.

- (void) setBackgroundStyle:(NSBackgroundStyle)backgroundStyle
{
    NSTableRowView *row = (NSTableRowView*)self.superview;
    if (row.isSelected) {
        self.textField.textColor = [NSColor blackColor];
    } else {
        self.textField.textColor = [NSColor whiteColor];
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 当有选择但窗口不是键时,这不能正确绘制.Cocoa将(截至10.10)绘制灰色背景,但文本字段为黑色,因此自定义控件需要绘制为"非活动".比较backgroundStyle!= NSBackgroundStyleLight以确定是否应将控件绘制为活动似乎是关键. (3认同)