Изменить цвет NSTableViewCell - PullRequest
10 голосов
/ 21 мая 2010

Как я могу изменить цвет ячейки в моем NSTableView?

Ответы [ 4 ]

14 голосов
/ 22 мая 2010

В вашем NSTableViewDelegate для NSTableView реализуйте этот метод:

- (void)tableView:(NSTableView *)tableView 
  willDisplayCell:(id)cell 
   forTableColumn:(NSTableColumn *)tableColumn 
              row:(NSInteger)row

NSTableView вызывает его на своем делегате перед отображением каждой ячейки, чтобы вы могли влиять на ее внешний вид. Предполагая, что вы используете NSTextFieldCells, для ячейки, которую вы хотите изменить, позвоните:

[cell setBackgroundColor:...];

Или, если вы хотите изменить цвет текста:

[cell setTextColor:...];

Если вы хотите, чтобы столбцы имели различный внешний вид, или если все столбцы не являются NSTextFieldCells, используйте [tableColumn identifier], чтобы определить столбец. Вы можете установить идентификатор в Интерфейсном Разработчике, выбрав столбец таблицы.

2 голосов
/ 19 марта 2017

// TESTED - решение Swift 3 ... для изменения цвета текста ячейки в одном столбце. Все столбцы в моем табличном представлении имеют уникальный идентификатор

    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
    }
0 голосов
/ 18 мая 2018
//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;
}
0 голосов
/ 21 мая 2010

Попробуйте использовать для этого пользовательский NSView или метод NSTableView -setBackgroundColor:.

...