Самый простой способ сделать это - просто подкласс NSTableCellView. Вся документация говорит, что вы можете создать подкласс либо NSTableCellView или NSView, например, Table View Programming Guide for Mac:
Перетащите объект NSTableCellView (или пользовательский вид) из библиотеки объектов в соответствующей колонке в виде таблицы. ... Как правило, класс представления является подклассом NSTableCellView.
Это не говорит, что это, или почему вы хотите его использовать. Это похоже на NSView, у которого есть NSTextField и NSImageView, и это все, поэтому, если вы не создаете представление, которое имеет их, возникает соблазн игнорировать этот класс и просто подкласс NSView.
Интересно, что если у вас есть NSTextFields в NSTableCellView (даже если вы не используете свойство textField
для этого!), Они автоматически используют правильную светло-темную окраску.
В частности, кажется, что свойство NSTableCellView backgroundStyle
является причиной изменения фактического значения текста. В документации сказано:
Реализация по умолчанию автоматически переадресует вызовы на все подвидов, которые реализуют setBackgroundStyle: или являются NSControl, которые имеют классы NSCell, которые отвечают setBackgroundStyle :.
NSTextField - это NSControl с NSCell, конечно, поэтому он вызывает это на нем.
Хотя это не точно ясно в документации компании Apple (то, что делает «это» относится?), Кажется, что NSTableView называет -setBackgroundStyle:
на любой взгляд, который определяет его. Так что, если вы не хотите, чтобы подклассы NSTableCellView, вы можете в качестве альтернативы просто добавить свойство к вашему собственному NSView:
var backgroundStyle: NSBackgroundStyle
и ваш код рисования использовать.