2012-04-30 11 views
0

1つのNSTableViewに2つのデータソースを移入させることは理にかなっていますか?または、ポップアップボタン(どのデータソースから読み込むかを選択できる)がより合理的になるでしょうか?複数のデータソースを持つ単一のNSTableView

単一のNSTableViewオプションを使用すると、すべてのデータを単一のデータソース(NSDictionaryなど)に入力してからテーブルにデータを入力すればよいでしょうか?私がこのアイデアで見る唯一の問題は、テーブルの選択が完了したときに起こることです。元の場所のどれが選択されたかをどのように解読しますか?

データソースからデータを取得してテーブルに直接データを取り込むと、関連するNSTableView 'count'メソッドのテーブルのカウントはどうなるでしょうか。データストア1とデータストア2のカウントを追加するとしますか?

ご迷惑をおかけして申し訳ありません。入力いただきありがとうございます!

答えて

2

データをテーブルビューに表示するには、複数のデータソースを使用することができますが、テーブルビューのdatasourceとして割り当てられ、NSTableViewDatasourceプロトコルを実装する1つのコントローラオブジェクトを使用する必要があります。

コントローラオブジェクトにいくつかのコードを記述して、テーブルビューを構成する複数のソース配列を追跡し、項目数と各項目の内容に適切な値を提供する必要があります。

これは非常に単純化した例である:それは、ユーザーが特定の行を選択したときに、その行を翻訳するのは簡単でなければなりませんから、そのデータを取得しています場所の選択については

- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView 
{ 
    return [array1 count] + [array2 count]; 
} 

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex 
{ 
    if(rowIndex >= [array1 count]) 
    { 
     return [array2 objectAtIndex:rowIndex - [array1 count]]; 
    } 
    else 
    { 
     return [array1 objectAtIndex:rowIndex]; 
    } 
} 

は、よく、あなたのコントローラが知っていますバッキングストアの1つにある一致するオブジェクトのインデックス。

1

アプリケーションのロジックに応じて、意味があります。最も簡単な方法は、すべてのテーブルセクションに異なるソースを設定することです。次に、セクション番号をデータベースのセレクタとして使用できます。

関連する問題