3

我遇到了一个奇怪的问题。我有两个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]];

仍然没有运气。任何人都有任何想法可能导致这种情况?提前致谢!

4

1 回答 1

-1

我的猜测是它在您的自定义背景颜色之上绘制了编辑框。您可以尝试子类化NSTextFieldCell和覆盖editWithFrame:inView:editor:delegate:event:
(当然要确保您的单元格是setDrawsBackground:YES.)

于 2011-05-11T17:00:55.590 回答