Как я могу изменить отдельные цвета фона ячейки в 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 или просто использовать метки и текстовые поля.