为什么NSTextField不重绘聚焦字段的背景?

时间:2011-05-11 16:42:50

标签: objective-c background-color nstextfield redraw

我遇到了一个奇怪的问题。我有两个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 :(得分:-1)

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