Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c drawRect真的在改变NSView的背景色吗?_Objective C_Cocoa - Fatal编程技术网

Objective c drawRect真的在改变NSView的背景色吗?

Objective c drawRect真的在改变NSView的背景色吗?,objective-c,cocoa,Objective C,Cocoa,在互联网上的任何地方,我都可以看到,要更改NSView的背景色,您只需覆盖其方法drawRect,如下所示: - (void)drawRect:(NSRect)rect { [[NSColor yellowColor] set]; NSRectFill(rect); } 比如说 然而,在我的例子中,颜色是在视图的顶部绘制的(我再也看不到内容了),这对我来说是非常合乎逻辑的。DrawRect应该绘制视图,而不仅仅是其背景 我缺少什么?您提到的示例显示背景上方视图的子视图。填充背景

在互联网上的任何地方,我都可以看到,要更改NSView的背景色,您只需覆盖其方法drawRect,如下所示:

- (void)drawRect:(NSRect)rect
{
    [[NSColor yellowColor] set];
    NSRectFill(rect);
}
比如说

然而,在我的例子中,颜色是在视图的顶部绘制的(我再也看不到内容了),这对我来说是非常合乎逻辑的。DrawRect应该绘制视图,而不仅仅是其背景


我缺少什么?

您提到的示例显示背景上方视图的子视图。

填充背景后,您应该调用
[super-drawRect:rect]
。否则,您只需替换将由超类实现绘制的所有内容。

当然,假设存在一个超类(即Patrick没有直接将NSView子类化,而是将NSView的其他子类子类化)。如果他直接将
NSView子类化,他一开始就不会注意到内容消失的问题。Docu说:“默认实现不起任何作用。如果子类进行自定义绘图,则应重写此方法。[…]如果自定义视图是direct NSView子类,则不需要调用super。对于所有其他视图,请在实现中的某个点调用super,以便父类可以执行任何其他绘图。”