自定义NSTextFieldCell和背景图

时间:2014-06-28 16:38:28

标签: cocoa nstextfield nstextfieldcell

我创建了一个自定义的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];
}

enter image description here

但是如果禁用背景绘图,我还需要做些什么来清除背景?我想让文本视图下的其他内容发挥得淋漓尽致(因此,只需删除superview的背景颜色就无法解决)。

1 个答案:

答案 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];
    }
}