Farbe ändern von NSTableViewCell
-
04-10-2019 - |
Frage
Wie kann ich die Farbe einer Zelle in meinem NSTableView ändern?
Lösung
Versuchen Sie eine benutzerdefinierte NSView
für die Verwendung oder NSTableView
Methode des -setBackgroundColor:
.
Andere Tipps
In Ihrem NSTableViewDelegate
für die NSTableView
, implementieren diese Methode:
- (void)tableView:(NSTableView *)tableView
willDisplayCell:(id)cell
forTableColumn:(NSTableColumn *)tableColumn
row:(NSInteger)row
Die NSTableView
nennt dies auf seinem Delegierten vor jeder Zelle angezeigt wird, so dass Sie das Aussehen beeinflussen können. Angenommen, Sie sind mit NSTextFieldCells, für die Zelle, die Sie ändern wollen Aufruf:
[cell setBackgroundColor:...];
Oder, wenn Sie möchten, die Textfarbe ändern:
[cell setTextColor:...];
Wenn Sie die Spalten wollen verschiedene Erscheinungen haben, oder wenn alle Spalten sind nicht NSTextFieldCells, Verwendung [tableColumn identifier]
zu, äh, die Spalte identifizieren. Sie können die Kennung in Interface Builder festgelegt durch die Spalte der Tabelle auswählen.
// GETESTET - Swift 3 Lösung ... für Farbe der Zelle Text in einer einzigen Spalte zu ändern. Alle Spalten in meinem Tableview haben eine eindeutige Kennung
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let myCell:NSTableCellView = tableView.make(withIdentifier: (tableColumn?.identifier)!, owner: self) as! NSTableCellView
if tableColumn?.identifier == "MyColumn" {
let results = arrayController.arrangedObjects as! [ProjectData]
let result = results[row]
if result.ebit < 0.0 {
myCell.textField?.textColor = NSColor.red
} else {
myCell.textField?.textColor = NSColor.black
}
}
return myCell
}
//for VIEW based TableViews using Objective C
//in your NSTableViewDelegate, implement the following
//this customization makes the column numbers red if negative.
- (NSView *)tableView:(NSTableView *)inTableView
viewForTableColumn:(NSTableColumn *)tableColumn
row:(NSInteger)row
{
NSTableCellView *result = nil;
if ([tableColumn.title isEqualToString: @"Amount"]) {
//pick one of the following methods to identify the NSTableCellView
//in .xib file creation, leave identifier "blank" (default)
result = [inTableView makeViewWithIdentifier:[tableColumn identifier] owner:self];
//or set the Amount column's NSTableCellView's identifier to "Amount"
result = [inTableView makeViewWithIdentifier:@"Amount" owner:self];
id aRecord = [[arrayController arrangedObjects] objectAtIndex:row];
//test the relevant field's value
if ( aRecord.amount < 0.0 )
[[result textField] setTextColor:[NSColor colorWithSRGBRed:1.0 green:0.0 blue:0.0 alpha:1.0]];
} else {
//allow the defaults to handle the rest of the columns
result = [inTableView makeViewWithIdentifier:[tableColumn identifier] owner:self];
}
return result;
}