4

OS X アプリを作成していますが、別のウィンドウでのフォント スムージングに問題があります。

テキストを入力するテキストフィールドと、あなたが書いた内容に応じて提案のリストがポップアップ表示される提案ウィンドウがあります。NSTableViewこれらの提案を表示し、「ポップアップ」ウィンドウとして表示するためにビューセルベースを使用しSFBPopoverWindowController ています(同じ効果を持つ他のクラスを試しました)。行が最初に描画されたときはきれいに見えますが、それらを選択した後 (キーボードまたはマウス)、フォントの太さが変わります。太字の設定ではなく、フォントのスムージング方法を変更するような視覚的なものです。

セル内のフォント スムージングの問題

「音符」はここで選択されたセルです

さらに奇妙なのは、ウィンドウを 3 回非表示にして表示した後、その時点からすべてが正常に機能することです。

ウィンドウを 3 回表示した後のフォント スムージングの問題

繰り返しますが、「音符」が選択されたセルです。

NSTableRowView選択はクラスとそのメソッドを上書きすることによって行われますdrawSelectionInRect:が、カスタム クラス内のすべてを描画しようとしましNSTableCellViewたが、役に立ちませんでした。テキストは標準NSTextFieldです。何も変更されていません。

SFBPopoverWindow (およびそのコントローラー) は一度作成され、 styleMask NSBorderlessWindowMask、 backing NSBackingStoreBuffered、 defer を に設定して再利用されYESます。私が行った唯一の変更は、SFBPopoverWindowControllerキーウィンドウになるウィンドウをオフにすることでしたが、何も変わりません。

4

1 に答える 1

3

これは、テーブル ビューが選択したセルを描画する方法に関連している可能性があります ( setSelectionHightLightStyle:)。コードまたは IB / ストーリーボード ファイルでスタイルを None/ に設定し、NSTableViewSelectionHighlightStyleNone自分で (NSTableRowViewサブクラスで) 選択範囲を描画してみてください。

背景:NSTableViewSelectionHighlightStyleRegularまたはNSTableViewSelectionHighlightStyleSourceListテーブル ビューを使用する場合、標準の選択動作と外観を使用することを想定し、それをサポートするためにいくつかの魔法を行います。

==========

アップデート

==========

私の以前の回答はまだ有効ですが、問題を説明し、回避策を示唆しているだけなので、実際の解決策を追加したいと思いました. テーブル ビュー (カスタム フォントと色を使用) に使用する場合NSTableViewSelectionHighlightStyleRegularは、行が強調表示されたときに有効になるシステム マジックを「無効にする」方法が必要です。提案された解決策の 1 つは 、ファーストレスポンダーのステータスを拒否することです。これには多くの欠点があり、良い解決策ではありません。

それでは、行が強調表示されるとすぐに作動するシステムの「魔法」を詳しく見てみましょう。NSTableRowViewドキュメントによると、「サブビューの描画方法を示す」プロパティ interiorBackgroundStyle があります。さらに 'この値は、NSTableRowView に設定された一連のプロパティに基づいて動的に計算されます。サブクラスは、現在表示されているプロパティに基づいて異なる方法で描画するときに、この値をオーバーライドできます。このメソッドを呼び出して、サブビューが使用する色を決定することもできます。または、NSControls のセルに -backgroundStyle をこの値に設定することもできます。'

このスタイルはサブビュー階層に引き継がれ、テキスト フィールドが奇妙に見えると思います。システムは、強調表示されたセルの背景が暗いと見なし、interiorBackgroundStyleを暗い色に変更します。他のコントロールはそれに応じて適応しようとします。

この問題には 2 つの解決策があると思います。

1)サブクラスでオーバーライドinteriorBackgroundStyleし、NSTableRowViewインターフェイスに合ったスタイルを返します(私の場合.light、ハイライトの色が非常に明るい青であるためです)。これは私にとってはうまくいきました。

2) 特定の要素のスタイルだけを変更したくないために、スタイル全体を変更するのは少し多すぎる場合は、これらのサブクラスのみを調整する必要があるかもしれません。私はまだこれを試していません。

于 2015-05-08T05:03:57.397 に答える