Как я могу изменить отдельные цвета фона ячейки в NSForm?

Я хотел бы индивидуально установить цвета фона ячейки в NSForm, Я думал, что это будет вопрос подкласса NSForm и переопределения -drawCellAtRow:column:, Но -drawCellAtRow:column: вызывается только когда клетка получает фокус.

Я экспериментировал с звонками -setCellBackgroundColor на NSForm но это меняет фон заголовка, а не значение.

Есть ли подход, который я не нахожу?

1 ответ

Решение

Я думаю, что это просто невозможно с NSFormCell.

Первое, что я попробовал:

self.form.drawsCellBackground = YES;
self.form.cellBackgroundColor = [NSColor redColor];

Похоже, что нарисовать фон только за меткой. Дальнейшее тестирование показало, что один NSFormCell охватывает как метку, так и текстовое поле, а фон рисует позади обоих. Когда текстовое поле отображается сверху, его собственный фон скрывает красный цвет.

Далее я вложил в подкласс NSFormCell. Единственный метод для вызова -drawWithFrame:inView:, Рамка, опять же, охватывает как метку, так и текстовое поле. Контрольный вид - NSForm. Если я нарисую свой фон, а затем вызвать [super drawWithFrame:inView:], он выглядит так же, как и выше, видимый за меткой, но не виден за текстовым полем. Если я вызову супер, а затем нарисую фон, он появится поверх обоих.

Реализация NSFormCell не вызывает -drawInteriorWithFrame:inView: и при этом это, кажется, не обеспечивает другую точку переопределения.

Я пробовал настройку highlightedи внедрение -highlightColorWithFrame:inView: - та же проблема.

Пока я пытался понять, как все это работает, я также пытался создать подкласс NSForm. Единственный метод, связанный с рисованием, называется -drawRect:, Эти методы никогда не вызываются: -drawCellAtIndex:, -drawCellAtRow:column:, -drawCell:, -drawCellInside:,

Помимо того, что Apple пытается это исправить, единственные решения, которые я вижу, - это использовать суперкласс NSForm NSMorm или просто использовать метки и текстовые поля.

Другие вопросы по тегам