Мне не удается создать и нарисовать 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, если я могу исправить свой подход здесь.