【问题标题】:Why does NSTextField not redraw the background of focused fields?为什么 NSTextField 不重绘焦点字段的背景?
【发布时间】:2011-08-23 11:42:34
【问题描述】:

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

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

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

【问题讨论】:

    标签: objective-c background-color nstextfield redraw


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我会试试的!一旦我得到它的工作,我会回来将你的答案标记为正确。 :-)
    • 嗯,这与我看到的行为一致:如果我点击离开它,就会出现正确的背景。我今天没有时间处理它,但我很快就会,所以我会确认。
    • 我无法让它工作。很伤心。它似乎与字段的选择状态有关。谁知道呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多