Как я могу изменить отдельные цвета фона ячейки в NSForm? - PullRequest
1 голос
/ 06 марта 2012

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

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

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

1 Ответ

1 голос
/ 11 декабря 2012

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

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

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

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

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

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

Я попытался установить highlighted и реализация -highlightColorWithFrame:inView: - та же проблема.

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

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

...