我创建了一个自定义的NSTextFieldCell并覆盖了- (void)drawInteriorWithFrame: (NSRect)cellFrame inView: (NSView *)controlView
以在此处创建自己的绘图。但是,我在背景绘图方面遇到了麻烦。在不调用super
的情况下,背景不会被清除,后续图形会产生涂抹效果。设置drawBackground时不会发生这种情况,因为在这种情况下,我可以用背景颜色填充cellFrame。
- (void)drawInteriorWithFrame: (NSRect)cellFrame inView: (NSView *)controlView {
if (self.drawsBackground) {
[self.backgroundColor set];
} else {
[NSColor.clearColor set];
}
NSRectFill(cellFrame);
[self.attributedStringValue drawInRect: cellFrame];
}
但是如果禁用背景绘图,我还需要做些什么来清除背景?我想让文本视图下的其他内容发挥得淋漓尽致(因此,只需删除superview的背景颜色就无法解决)。
答案 0 :(得分:2)
如果您尝试使用[NSColor clearColor]
填充单元格,则会将其绘制为黑色。
在不需要时尽量避免填充。您将能够删除super
来电。
示例:
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
if (self.drawsBackground) {
if (self.backgroundColor && 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];
}
}