2013-02-14 2 views
0

어디서나 인터넷에 난 그냥 이런 식으로 그 방법의 drawRect를 오버라이드 (override) 할 수있는 NSView의의 배경색을 변경하는 것을 읽을 수 있습니다 : 예를 here를 들어drawRect가 NSView의 배경색을 변경하고 있습니까?

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

.

그러나 필자의 경우 색상이보기 상단에 그려져있어 (필자는 내용이 더 이상 볼 수 없음) 이는 상당히 논리적입니다. DrawRect는 배경뿐만 아니라 뷰를 그려야합니다.

무엇이 누락 되었습니까?

답변

2

배경을 채우고 [super drawRect:rect]으로 전화해야합니다. 그렇지 않으면 수퍼 클래스의 구현에 의해 그려지는 모든 것을 단순히 대체하는 것입니다.

+0

물론 수퍼 클래스가 있다고 가정합니다 (즉 패트릭은 NSView를 직접 서브 클래스로 만들지 않았지만 NSView의 다른 서브 클래스로 서브 클래 싱했습니다). –

+0

그는 NSView를 직접 하위 클래스로 만들었다면 처음에는 내용이 사라지는 문제를 보지 못했을 것입니다. – omz

+1

Docu는 "기본 구현은 아무 것도하지 않습니다. 사용자 정의 드로잉을 수행하려면 하위 클래스가이 메서드를 재정의해야합니다. [...] 사용자 정의 뷰가 직접 NSView 하위 클래스이면 super를 호출 할 필요가 없습니다. 다른 모든 뷰의 경우, 부모 클래스가 추가 드로잉을 수행 할 수 있도록 구현의 어느 시점에서 super를 호출하십시오. " – Flori

0

참조하는 예는 배경 위에 뷰의 하위보기를 표시합니다.

관련 문제