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)