#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. Я не смог заставить это работать. Очень печально. Похоже, это связано с состоянием выбора поля. Хотя, кто знает?