0

私はこの問題に完全に困惑しています。いくつかの異なるクラスを使用するカスタム検索コントロールを作成しました。何らかの理由で、NSTextFieldがこれらの異なる部分のどこかにある場合、NSTextFieldはその周りに黒一色の境界線を表示し、カーソルは点滅しません。

誰かが数分あれば-私はpastebinに私のコードをまとめました。

これが検索コントロールの写真であり、この特定の場合の様子です。

http://imgur.com/6y8qx.png

検索コントロールはグラデーションビューの上にあります:http:
//pastebin.com/m43fde2b6

検索コントロールは次のコードと組み合わされています:http:
//pastebin.com/m5be08c32

検索コントロールの実際のグラフィカルな部分は、次の2つのクラスから構築されています。http:
//pastebin.com/m5bfa9439
http://pastebin.com/m5e909a2f(クラスより上に拡張)

一体何が悪いのかわかりません。テキストは機能しますが、黒い境界線があり、カーソルが点滅しません。私は何が間違っているのですか?

ああ、私はこれで何日も髪を抜いてきました。

4

2 に答える 2

1

兄弟ビューの上に1つのビューを配置することは、MacOSXではこれまで十分にサポートされていませんでした。代わりにサブビューにしてみてください。専用の検索フィールドビューのプライベートコンポーネントにすることもできます。

その点で、NSSearchFieldを使用していない理由はありますか?

于 2009-09-26T03:53:42.253 に答える
0

私はそれを理解しました!ついに。

私が気付いていなかったのは、「drawRect:」メソッドのパラメーター「dirtyRect」は、「dirty」であるコントロールの部分であり、再描画する必要があることを意味します。

したがって、NSTextFieldがコントロールの上にある場合、そのコントロールの「drawRect:」が(3)異なる時間(異なる「dirtyRect」パラメーターを使用して)呼び出されるようにトリガーされます。

1:カーソル-通常はNSMakeRect(textField.origin.x、textfield.origin.y、1、textfield.origin.height)。2:テキストフィールドフレーム3:テキストフィールドが置かれているコントロールのサイズ。

したがって、修正は簡単でした。コントロールのスケール9の描画を、常に[セルフフレーム]に描画するように変更します。ここで変更を確認できます:http://pastebin.com/m50a5b0ad(89行目)。

以前は、「rect」パラメーター(http://pastebin.com/m5e909a2f-行88)に描画していましたが、drawRect呼び出しの送信元によって、rectパラメーターのサイズが異なりました。

于 2009-09-27T19:01:25.783 に答える