2012-03-05 1 views
1

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

Я экспериментировал с вызовом -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, чтобы исправить это, единственные решения, которые я вижу, пытаются использовать супермаркет NSSMorm NSMatrix или просто использовать метки и текстовые поля.