drawWithFrame: рисует фон NSTextFieldCell из регистрации с рамкой - PullRequest
0 голосов
/ 26 ноября 2018

Мне не удается создать и нарисовать NSTextFieldCell программным образом, чтобы воссоздать тот же визуальный внешний вид, что и NSTextFieldCells, аналогично сконфигурированный, когда он встроен в Интерфейсный конструктор и нарисован автоматически Какао.

Контекст - это пользовательский NSView, который отображает контент, который пользователь может выбрать, удалить или заменить.Хотя это содержимое не является текстовым, я бы хотел, чтобы поле напоминало NSTextField, поэтому я пытаюсь вставить NSTextFieldCell в службу для рисования рамки, фоновой заливки и т. Д., Которые соответствуют соответствующему NSTextField.

Я настраиваю ячейку следующим образом (во время пользовательского управления init ()):

textFieldCell = [[NSTextFieldCell alloc] init];
[textFieldCell setDrawsBackground: YES];
[textFieldCell setBackgroundColor: NSColor.blueColor];
[textFieldCell setBackgroundStyle: NSBackgroundStyleNormal];
[textFieldCell setBezeled: YES];
[textFieldCell setStringValue: @""];

, а затем в drawRect пользовательского элемента управления,

- (void) drawRect: (NSRect) rect
{
    // Draw an NSTextField-like background
    if( isSelectAndDeletable)
    {
         [textFieldCell drawWithFrame: [self bounds] inView: self];
    }
    ...  // more content drawing here
 }

Это производит на экране1-пиксельная рамка соответствующей толщины и размера и заливает ее синим цветом. Но сама рамка является серой, а не синей, и заливка касается рамки сверху (без белого поля) и пропускает ее на два пикселя снизу (толстое белое поле). В отличие от этого, когда я позволяюКакао рисует мои textFieldCells либо как часть NSTextField, либо как отдельные ячейки, созданные в Интерфейсном Разработчике, рамка рисуется с использованием цвета фона ячейки, а заливка вставляется с одним белым пикселем вокруг.

Эта картина демонстрирует проблему. Она показывает три NSTextFieldCell, вторая из которых (с дефектом) отрисована моим собственным вызовом drawWithFrame: inView:, две другие (правильно) напрямую во время выполнения.

Есть идеи, что я делаю не так?Мне кажется, что я передаю правильный прямоугольник (кадр находится в правильном месте), и один вызов производит и правильный штрих (кадр) и неправильное заполнение (фон).Это какой-то неправильно настроенный ободок?Я могу нарисовать эффект, который мне нужен, но предпочел бы использовать NSTextFieldCell, если я могу исправить свой подход здесь.

...