Изменить цвет nstableviewcell
-
04-10-2019 - |
Вопрос
Как я могу изменить цвет ячейки в моем NStableView?
Решение
Попробуйте использовать пользовательский NSView
для этого или NSTableView
С. -setBackgroundColor:
метод.
Другие советы
В твоем NSTableViewDelegate
для NSTableView
, внедрить этот метод:
- (void)tableView:(NSTableView *)tableView
willDisplayCell:(id)cell
forTableColumn:(NSTableColumn *)tableColumn
row:(NSInteger)row
То NSTableView
Звонит это на своем делегате перед отображением каждой ячейки, чтобы вы могли повлиять на его внешний вид. Предполагая, что вы используете NStextFieldCells, для клетки, которую вы хотите изменить звонок:
[cell setBackgroundColor:...];
Или, если вы хотите изменить цвет текста:
[cell setTextColor:...];
Если вы хотите, чтобы столбцы были разные внешности, или если все столбцы не являются NStextFieldCells, используйте [tableColumn identifier]
Чтобы определить столбец. Вы можете установить идентификатор в интерфейсе Builder, выбрав столбец таблицы.
// Испытано - 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
}
//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;
}