2013-02-14 5 views
0

Везде в интернете я могу прочитать, что, чтобы изменить цвет фона NSView вы можете просто переопределить его метод DrawRect так:Действительно ли drawRect меняет цвет фона NSView?

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

Например here.

Однако в моем случае цвет рисуется поверх представления (я больше не вижу содержимого), что для меня вполне логично. DrawRect должен нарисовать вид, а не только его фон.

Что мне не хватает?

ответ

2

После заполнения фона вы должны позвонить [super drawRect:rect]. В противном случае вы просто заменяете все, что будет нарисовано реализацией суперкласса.

+0

Предполагая, конечно, что существует суперкласс (т. Е. Патрик не подклассифицировал NSView напрямую, а скорее подклассифицировал некоторый другой подкласс NSView). –

+0

Если бы он напрямую подклассифицировал NSView, он бы не заметил проблему исчезновения контента в первую очередь. – omz

+1

DocuMail: «Реализация по умолчанию ничего не делает. Подклассы должны переопределять этот метод, если они выполняют пользовательский чертеж. [...] Если ваш пользовательский вид является прямым подклассом NSView, вам не нужно вызывать супер. Для всех остальных видов, вызовите super в какой-то момент вашей реализации, чтобы родительский класс мог выполнить любой дополнительный чертеж ». – Flori

0

Образцы, на которые вы ссылаетесь, отображают подпункты представления над фоном.

Смежные вопросы