2012-01-04 12 views
2

プロジェクトにビューベースのNSOutlineViewを実装しました。私は浮動グループ行を使用しています。ここでは、この配列を「並べ替え」レイアウト(例:「種類別」:CTRL-CMD-2)にすると、Finderのリストビュー(CMD-2)のようなNSOutlineViewの外観を持っていきたいと思います。つまり、一番上のグループ行に列タイトルが表示され、次の下位グループ行が前の行をビューからずらすとすぐに、列タイトルが2番目のグループ行に表示されます(これにより、センス)。ビューベースのNSOutlineViewのファインダスタイルのフローティンググループ行

これを達成するための既定の方法はありますか?これまではNSTableCellViewをサブクラス化して列のタイトルを表示していましたが、上の浮動小数点に関連してグループ行の位置を見つけることができないため、フェードインを機能させることはできません。私は私が望むものを達成するための可能な方法を見つけた

よろしく、 マイケル

+0

私は任意のFinderのリストビューに全くフェージング表示されません。列見出しを持つ標準の 'NSOutlineView'があります。あなたは何を意味するのスクリーンショットを投稿できますか? –

+0

ロブ、あなたの答えをありがとう。私はオリジナルの質問を編集しました。 CTRL-CMD-1からCTRL-CMD-7を押す。これはAFAIKで、ライオンでのみ利用可能です。 –

答えて

0

。私のカスタムNSTableCellViewのdrawRect:メソッドでは、もちろん、囲むNSClipViewを基準にしたビューの位置を調べるのは難しいかもしれません。関連コード:

- (void)drawRect:(NSRect)dirtyRect { 
    // _isGroupView is a member variable which has to be set previously 
    // (usually in setObjectValue:) in order for us to know if we're a 
    // group row or not. 
    if (_isGroupView) { 

    // This is the nasty party: 
    NSClipView *clipView = (NSClipView*)self.superview.superview.superview; 
    if (![clipView isKindOfClass:[NSClipView class]]) { 
     NSLog(@"Error: something is wrong with the scrollbar view hierarchy."); 
     return; 
    } 

    NSRect clipRect = [clipView documentVisibleRect]; 
    CGFloat distanceToTop = self.superview.frame.origin.y - clipRect.origin.y; 
    if (self.superview.frame.origin.y - clipRect.origin.y < self.frame.size.height) { 
     // This means, that this NSTableCellView is currently pushing the 
     // view above it out of the frame. 

     CGFloat alpha = distanceToTop/self.frame.size.height; 
     NSColor *blendColor = [[NSColor blackColor] blendedColorWithFraction:alpha ofColor:[NSColor whiteColor]]; 

     // ... 
     // do stuff with blendColor 
     // ... 
     // blendColor should now be the appropriate color for the wanted 
     // "fade in" effect. 
     // 
    } 
    } 
} 

私はこれが意味をなさないことを望みます。すべてのヒントはまだ評価されています!

乾杯、 マイケル

関連する問題