Почему NSTextField не перерисовывает фон сфокусированных полей?

#objective-c #background-color #nstextfield #redraw

#objective-c #цвет фона #nstextfield #перерисовать

Вопрос:

Я столкнулся со странной проблемой. У меня есть два 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:

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

Комментарии:

1. Спасибо, я попробую это! Я вернусь, чтобы отметить ваш ответ как правильный, как только он заработает. 🙂

2. Что ж, это согласуется с поведением, которое я наблюдаю: если я щелкаю в стороне от него, появляется соответствующий фон. У меня нет времени поработать над этим сегодня, но я скоро это сделаю, поэтому я подтверждаю.

3. Я не смог заставить это работать. Очень печально. Похоже, это связано с состоянием выбора поля. Хотя, кто знает?