2011-11-11 12 views
16

Lionで導入されたビューベースのNSOutlineViewを使用してソースリストを実装する方法について、明確で簡潔な例やガイドが見つかりましたか?アップルのサンプルプロジェクトを見てきましたが、方向や説明がなくても、どういうふうに動作するかという概念を理解するのは難しいです。Cocoa Bindingsを使用してビューベースのソースリスト(NSOutlineView)を実装する方法の例?

私は優れたPXSourceListをフォールバックとして使用する方法を知っていますが、可能であれば、代わりにビューベースのソースリストを使用したいと考えています。

答えて

29

これはcocoa-bindingsタグでタグ付けされています。だから、あなたは「バインディングあり」を意味すると思います。私は簡単な例を書いた。 Xcodeの新しいドキュメントベースのCocoaアプリケーションテンプレートから始めましょう。あなたの好きなものを呼んでください。まず、偽のデータをバインドするコードをいくつか追加しました。ここに私AppDelegateヘッダーは次のようになります。

#import <Cocoa/Cocoa.h> 

@interface SOAppDelegate : NSObject <NSApplicationDelegate> 

@property (assign) IBOutlet NSWindow *window; 

@property (retain) id dataModel; 

@end 

そして、ここでは次のように私AppDelegateの実装が見えるものです:私が作成した偽のデータ構造には特に意味はありません

#import "SOAppDelegate.h" 

@implementation SOAppDelegate 

@synthesize window = _window; 
@synthesize dataModel = _dataModel; 

- (void)dealloc 
{ 
    [_dataModel release]; 
    [super dealloc]; 
} 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    // Insert code here to initialize your application 

    // Make some fake data for our source list. 
    NSMutableDictionary* item1 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 1", @"itemName", [NSMutableArray array], @"children", nil]; 
    NSMutableDictionary* item2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2", @"itemName", [NSMutableArray array], @"children", nil]; 
    NSMutableDictionary* item2_1 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.1", @"itemName", [NSMutableArray array], @"children", nil]; 
    NSMutableDictionary* item2_2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.2", @"itemName", [NSMutableArray array], @"children", nil]; 
    NSMutableDictionary* item2_2_1 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.2.1", @"itemName", [NSMutableArray array], @"children", nil]; 
    NSMutableDictionary* item2_2_2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.2.2", @"itemName", [NSMutableArray array], @"children", nil]; 
    NSMutableDictionary* item3 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 3", @"itemName", [NSMutableArray array], @"children", nil]; 

    [[item2_2 objectForKey: @"children"] addObject: item2_2_1]; 
    [[item2_2 objectForKey: @"children"] addObject: item2_2_2]; 

    [[item2 objectForKey: @"children"] addObject: item2_1]; 
    [[item2 objectForKey: @"children"] addObject: item2_2]; 

    NSMutableArray* dataModel = [NSMutableArray array]; 

    [dataModel addObject: item1]; 
    [dataModel addObject: item2]; 
    [dataModel addObject: item3]; 

    self.dataModel = dataModel; 
} 

@end 

、私はただで何かを見せたかったですいくつかのサブレベルなどがあります。重要な点は、Interface Builderのバインディングで指定したキーパスがデータのキーと一致することです(この場合は偽データ)。

MainMenu.xib fil e。 IBエディタでは、次の手順を実行します。

  1. あなた.xibにNSTreeControllerを追加するオブジェクトをライブラリます(Ctrl-CMD-OPT-3)を使用します。
  2. NSTreeControllerを選択し、属性インスペクター(CMD-OPT-4)を使用すると、キーのパスを設定>子供childrenに(この例では、あなたのデータの場合、これは、子オブジェクトの配列を返すものは何でもする必要があります。)
  3. まだ選択NSTreeController、オブジェクトライブラリ(Ctrlキーを押しながらCmd-を使用 dataModel
  4. 次のモデルキーパスで、AppDelegateにコンテンツ配列をバインドするバインディングインスペクタ(CMD-OPT-7)を使用して
  5. Opt-3)を使用して.xibにNSOutlineViewを追加します。
  6. ウィンドウ内で満足できるように配置します(通常、ウィンドウの高さ全体を左側に置きます)
  7. NSOutlineViewを選択します(最初にクリックすると、それを含んでいるNSScrollView。それをもう一度クリックすると、NSOutlineView自体がドリルダウンされます。すべてのオブジェクトがあるIBエディタの左側の領域を広げると、これはMUCHになります。これにより、オブジェクトをツリーとして表示し、そのようにナビゲートして選択することができます。
    • コンテンツモードView Based
    • 1
    • ハイライトSource List
  8. 属性インスペクタ(CMD-OPT-4)を使用して)
  9. はNSOutlineViewセット
  10. バインディングインスペクタ(Cmd-Opt-7)を使用すると、 "Co ntent "から" Tree Controller "、コントローラキー:arrangedObjects(これは、ViewベースのNSTableView/NSOutlineViewsの動作がNSCellベースのものとはじまります)
  11. オブジェクトリスト(#6で説明)で、 NSOutlineViewのビュー階層を開き、Static Text - Table View Cellを選択します。バインディングインスペクタ(CMD-OPT-7)を使用して
  12. は、Table Cell Viewに値モデルキーパスををバインド:objectValue.itemName(私は偽のデータでitemNameを使用しました、あなたはあなたの名前に対応した方のキーを使用したいと思いますデータ項目)

保存します。実行します。あなたは、ソースのリストが表示されます、そしてあなたは子供を持つノードを展開したら、このようなものが表示される場合があります

enter image description here

あなたはアップルデベロッパプログラムにしている場合は、あなたがアクセスすることができるはずですWWDC 2011 Videos。 ViewベースのNSTableView(およびNSOutlineView)での作業に特化したものがあり、これにはかなり完全なバインディングが含まれています。

希望に役立ちます!

+1

FYI WWDC 2011のビデオを見るに基づくNSTableViewと題したセッション120です。 – jemeshsu

+1

これを使用する人は、次の点も考慮してください。http://stackoverflow.com/questions/7095703/binding-view-based-nsoutlineview-to-core-data – bijan

+0

この方法はLeopardとSnow Leopardでも実行できますか? – arufian

関連する問題