#cocoa #nstextfield #nstextfieldcell
#cocoa #nstextfield #nstextfieldcell
Вопрос:
Я создал пользовательскую ячейку NSTextFieldCell и переписал - (void)drawInteriorWithFrame: (NSRect)cellFrame inView: (NSView *)controlView
ее, чтобы сделать свой собственный рисунок здесь. Однако у меня проблемы с фоновым рисунком. Без вызова super
фон не очищается, а последующие рисунки создают что-то вроде эффекта размазывания. Этого не происходит, когда установлен параметр drawsBackground, так как в этом случае я могу просто заполнить ячейку цветом фона.
- (void)drawInteriorWithFrame: (NSRect)cellFrame inView: (NSView *)controlView {
if (self.drawsBackground) {
[self.backgroundColor set];
} else {
[NSColor.clearColor set];
}
NSRectFill(cellFrame);
[self.attributedStringValue drawInRect: cellFrame];
}
Но что мне нужно сделать, чтобы очистить фон в случае, если фоновый рисунок отключен? Конечно, я хочу, чтобы другой контент в текстовом представлении просвечивал (так что простое стирание с помощью цвета фона superview не является решением).
Ответ №1:
Если вы попытаетесь заполнить ячейку символом a [NSColor clearColor]
, она станет черной. Старайтесь избегать заливки, когда она не нужна. И вы сможете удалить свой super
вызов.
Пример:
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
if (self.drawsBackground) {
if (self.backgroundColor amp;amp; self.backgroundColor.alphaComponent>0) {
[self.backgroundColor set];
NSRectFill(cellFrame);
}
}
NSRect titleRect = [self titleRectForBounds:cellFrame];
NSAttributedString *aTitle = [self attributedStringValue];
if ([aTitle length] > 0) {
[aTitle drawInRect:titleRect];
}
}