3

私は奇妙な問題に遭遇しています。ユーザー名とパスワードを表す2 つのNSTextFieldがあります。間違ったユーザー名とパスワードの組み合わせを取得した場合、これら 2 つのフィールドを含むビューのコントローラーで、そのことを示すインスタンス変数を設定します。次に、インスタンス変数が変更されたときにキー値監視を使用して、次のメソッドを実行します。

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

フィールドがアクティブでない限り、これは正常に機能します。つまり、フィールドの 1 つを変更し、カーソルを内側にしてフォーカスを維持し、(メニュー項目をクリックして) 認証しようとすると、フォーカスのあるフィールドは新しい背景色に更新されませんが、フォーカスのないフィールドは行いません。

強制的に更新できるかどうかを確認するために、メソッドの最後に次の行を追加しました。

[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 に答える