Frage

Wie kann ich die Farbe einer Zelle in meinem NSTableView ändern?

War es hilfreich?

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top