我遇到了一个奇怪的问题。我有两个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]];
仍然没有运气。任何人都有任何想法可能导致这种情况?提前致谢!