Почему NSTextField не перерисовывает фон сфокусированных полей? - PullRequest
3 голосов
/ 11 мая 2011

У меня странная проблема. У меня есть два NSTExtField , представляющих имя пользователя и пароль. Когда я получаю неправильную комбинацию имени пользователя и пароля, я устанавливаю переменную экземпляра, указав это в контроллере представления, содержащего эти два поля. Затем я использую наблюдение значения ключа для запуска следующего метода при изменении переменной экземпляра:

- (void)handleCredentialsValidityToggle {
    if ([self areCredentialsValid]) {
        [passwordField setBackgroundColor:[NSColor colorWithCalibratedRed:1.0 green:1.0 blue:1.0 alpha:1.0]];
        [usernameField setBackgroundColor:[NSColor colorWithCalibratedRed:1.0 green:1.0 blue:1.0 alpha:1.0]];
    } else {
        [passwordField setBackgroundColor:[NSColor colorWithCalibratedRed:1.0
                                                                    green:1.0
                                                                     blue:0.35
                                                                    alpha:1.0]];
        [usernameField setBackgroundColor:[NSColor colorWithCalibratedRed:1.0
                                                                    green:1.0
                                                                     blue:0.35
                                                                    alpha:1.0]];
    }
}

Это работает нормально, если поле не активно. Другими словами, если я изменю одно из полей, оставлю его в фокусе с курсором внутри и попытаюсь подтвердить подлинность (щелкнув по элементу меню), поле с фокусом не обновится до нового цвета фона, а поле без фокуса делает.

Чтобы посмотреть, смогу ли я заставить его обновиться, я добавил следующие строки в конец метода:

[passwordField drawCell:[passwordField cell]];
[usernameField drawCell:[usernameField cell]];

Все еще не повезло. У кого-нибудь есть идеи, что может быть причиной этого? Заранее спасибо!

1 Ответ

0 голосов
/ 11 мая 2011

Я предполагаю, что он рисует рамку редактирования поверх вашего собственного цвета фона. Вы можете попробовать создать подкласс NSTextFieldCell и переопределить editWithFrame:inView:editor:delegate:event:.
(И, конечно, убедитесь, что ваша клетка setDrawsBackground:YES.)

...