2011-08-27 6 views
5

私はまだ小さなココアアプリケーションでビューベースのNSOutlineViewと苦労しています。私はファインダーの後に私のOutlineViewをモデルしようとしています。 Finder OutlineViewがフォーカスを失った場合(右側のフォルダをクリックするなど)、選択した行(例:デスクトップ)は明るい青色のグラデーションで選択されたままで、非アクティブな青色のグレーのグラデーションには変わりません。ビューベースのNSOutlineview選択勾配

私のアプリケーションでこの動作を複製したいと思います。

ビューベースのアウトラインビューでは、NSOutlineViewをサブクラス化して(void)highlightSelectionInClipRect:(NSRect)clipRectを再実装できました。ハイライトされた各行に明るい青色の背景画像が供給されるようになりました。

しかし、私のビューベースのOutlineView(SourceListスタイルに設定)では、このメソッドは明らかに呼び出されていません。私はいくつかのサイトが示唆しているように、nilを返すために(id)_highlightColorForCell:(NSCell *)cellを実装しましたが、それはどちらも役に立ちません。

ビューベースのアウトラインビューでハイライトグラデーションを設定する方法に関するヒントはありますか?

+0

私はこの正確な問題を抱えています。その "NSTableViewRowViewKey"のために+1 – tofutim

答えて

8

物事を乱すようなカスタム図面はありますか?あなたが選択したすべての図面があなたのために普通に処理されていると言うことができる限り、TableViewPlayground example(デフォルトではソースリストスタイルではありませんが、XIBへの変更は簡単です)をチェックしてください。

しかしhighlightSelectionInClipRect:

注上のMac OS X 10.7ドキュメントのエントリによると、ことを失敗:このメソッドは、ビューベーステーブルビューのサブクラスまたはオーバーライドされるべきではありません。 代わりに、NSTableRowViewをサブクラス化することによって行の描画のカスタマイズを行う必要があります。

あなたがNSTableRowViewをサブクラス化したいと思いますようだから私はそこexampleがTableViewPlaygroundでだ、とあなたの選択を描く(drawSelectionInRect:をオーバーライドし、(私はこれのいずれかを試していない)と思います。あなたはアプリがアクティブであることを確認することができ。[NSApp active]または多分例のようself.emphasizedプロパティがありません使用して

次に、(のみ10.7!)NSOutlineViewDelegateプロトコル方式でカスタムNSTableRowViewsの1を返したい:(NSTableRowView *)outlineView:(NSOutlineView *)outlineView rowViewForItem:(id)item

希望これは/作品役立ちます

私はTableViewPlaygroundの例では、デフォルトでoutlineView:viewForTableColumn:item:デリゲートメソッドを使用し、NSTableViewCellsですべてを行うことに注意する必要がありますが、あなたは私がと呼ばれ、その上に言及rowViewForItemメソッドを追加した場合。だから、私はそれを使って、それが全体の各行のビューを返すことができると思います。

6

おかげさまで、あなたのヒントで私は問題を非常に簡単に解決することができました。私はNSTableRowViewをサブクラス化し、常に真を返すように-(BOOL) isEmphasizedを上書きしました。

私はその後、ClbTableRowView *result = [outlineView makeViewWithIdentifier:identifier owner:self];

編集呼び出すことで、私のサブクラスの項目の特定のインスタンスを返すために私OutlineViewsデリゲートに-(NSTableRowView *)outlineView:(NSOutlineView *)outlineView rowViewForItem:(id)itemを実装:それのほかに、また、カスタムNSTableRowViewサブクラスを使用するのはかなり隠された道があるように思わを新しいNSViewオブジェクトをInterface BuilderのOutlineViewにドロップすることによって、その後、ビュークラスをサブクラスに設定し、Apple documentationに従って、ユーザーインターフェイス項目の識別子に「NSTableViewRowViewKey」を指定します。

+0

+1。それを見つけるために私にしばらく時間がかかりました。それは確かにかなり隠されている –

関連する問題