Цвет фона для NSView при создании экземпляра в IB - PullRequest
0 голосов
/ 10 июля 2011

Я бы хотел установить фон своих представлений. В настоящее время я пытаюсь сделать это путем переопределения - (void) drawRect: (NSRect) dirtyRect , как предложено здесь , поэтому мой пользовательский вид выглядит следующим образом:

@implementation ViewWithBackgroundColor

- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // ...
    }

    return self;
}

- (void)dealloc
{
    [super dealloc];
}

- (void)drawRect:(NSRect)dirtyRect
{
    [super drawRect:dirtyRect];

    [[NSColor greenColor] setFill];
    NSRectFill(dirtyRect);
}

@end

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

кто-нибудь знает, чего мне не хватает? Я не уверен, если это уместно, но представление хранится в перо. Я уже пытался вызвать setNeedsDisplay: ДА в awakeFromNib , но это не помогло.

спасибо заранее, Евгений

Ответы [ 2 ]

2 голосов
/ 10 июля 2011

Есть некоторые проблемы с вашим ‑drawRect: методом. Во-первых, вам не нужно (и не следует) вызывать реализацию super для ‑drawRect:, если только для этого нет особой причины. Реализация по умолчанию ‑drawRect: ничего не делает, поэтому в данном случае это просто потерянное сообщение, но вы должны выйти из привычки.

Во-вторых, при рисовании чего-то, что покрывает весь вид, вы обычно должны игнорировать грязный прямоугольник, который был передан, и рисовать фон, используя [self bounds] в качестве прямоугольника, переданного NSRectFill().

Если вы ссылаетесь на 10.6 SDK или выше, вы можете просто установить свойство backgroundColor представления вместо того, чтобы рисовать фон самостоятельно. Предыдущие SDK не поддерживают это свойство.

0 голосов
/ 10 июля 2011

Почему бы вам не попробовать установить для свойства backgroundColor значение [NSColor greenColor] при инициализации self.backgroundColor = [NSColor greenColor];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...