目标 c - 为什么 NSTextField 不重绘焦点字段的背景



我遇到了一个奇怪的问题。我有两个NSTExt字段代表用户名和密码。当我得到不正确的用户名/密码组合时,我在包含这两个字段的视图的控制器中设置了一个实例变量。然后,我使用键值观察在实例变量更改时运行以下方法:

- (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]];

还是没有运气。任何人都知道是什么原因造成的?提前感谢!

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

最新更新