Рисование NSControl, когда окна являются ключевыми или нет - PullRequest
3 голосов
/ 25 мая 2011

У меня есть подпредставление NSControl, и я хочу изменить чертеж, когда элемент управления не находится в keyWindow.Проблема в том, что я не вижу ни одного свойства, которое бы отражало это состояние (свойство enabled, но не имело).

Проще говоря, можно ли различить эти два состояния?

disabledenabled

1 Ответ

6 голосов
/ 25 мая 2011

Вы можете использовать свойство NSWindow keyWindow, и если вы хотите проверить, является ли ваш элемент управления первым респондентом для событий клавиатуры, также протестируйте [[self window] firstResponder] == self.Я не верю, что keyWindow поддерживает KVO, но есть NSWindowDidBecomeKeyNotification и NSWindowDidResignKeyNotification, которые вы можете прослушать.Например,

- (id)initWithFrame:(NSRect)frameRect;
{
    if ( self = [super initWithFrame:frameRect] )
    {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(display) name:NSWindowDidResignKeyNotification object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(display) name:NSWindowDidBecomeKeyNotification object:nil];
    }

    return self;
}

- (void)drawRect:(NSRect)aRect;
{
    if ( [[self window] isKeyWindow] )
    {
    // one way...
    }
    else
    {
    // another way!
    }
}

- (void)dealloc;
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowDidResignKeyNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowDidBecomeKeyNotification object:nil];
    [super dealloc];
}
...