質問

何にかかわらず、全ての設定NSTableView複数のカラムだけを表示一部のデータです。私のIBOutletsを設け、がんになっていくことになるでしょう。

役に立ちましたか?

解決

仮に使わないココアのバインディングコアのデータを表示できるデータをNSTableViewの実施により二つの方法から NSTableViewDataSource プロトコルです。一般的にコントローラを実施するプロトコルで開くコントローラ部でします。mファイルの追加これらの方法をコントローラ @implementation:

- (NSInteger)numberOfRowsInTableView:(NSTableView*)tableView {
  return 25;  // fill this out
}

– (id) tableView:(NSTableView*)tableView
       objectValueForTableColumn:(NSTableColumn*)column
       row:(int)row {
  return row % 3 ? @"Tick..." : @"BOOM!";  // fill this out
}

設定する必要がありますテーブルの dataSource 物件はコントローラです。インターフェイスビルダの制御-ドラッグテーブルからのビューのコントローラのセット dataSource.現在の構築-実行ってくださいデータを表に示す。

また一カラムを追加IBOutlet NSTableColumnお客さまごのコントローラう explosiveColumn.インターフェイスビルダー、制御-ドラッグコントローラからのカラムにしたいおよび設定 explosiveColumn.そして、tableView:objectValueForTableColumn:列できる試験の場合 column パラメータが同じオブジェクトとしての一つのアウトレットに設定:

– (id) tableView:(NSTableView*)tableView
       objectValueForTableColumn:(NSTableColumn*)column
       row:(int)row {
  if (column == explosiveColumn) {
    return row % 3 ? @"Tick..." : @"BOOM!";
  } else {
    // other columns blank for now
    return nil;
  }
}

このチュートリアルに有効と考えられる: http://www.cocoadev.com/index.pl?NSTableViewTutorial

他のヒント

ここで、データソースの方法で複数のテーブルビューおよびドキュメントベースのアプリケーションを使用した例です

#pragma mark - Data Source Methods
- (NSInteger) numberOfRowsInTableView:(NSTableView *)tv
{
    if (tv == racerTableView)
        return [racerList count];
    else if (tv == vehicleTableView)
        return [vehicleList count];
    else
        return 0; // something wrong here...
}

- (id)tableView:(NSTableView *)tv objectValueForTableColumn:(NSTableColumn *)col
        row:(NSInteger)rowi
{
    NSString *colid = [col identifier];
    if (tv == racerTableView){
        NHRacers *racer = [racerList objectAtIndex:rowi];
        return [racer valueForKey:colid];
    }
    else if (tv == vehicleTableView){
        NHVehicles *vehicle = [vehicleList objectAtIndex:rowi];
        return [vehicle valueForKey:colid];
    }
    else
        return 0; // something wrong here...
}

- (void)tableView:(NSTableView *)tv setObjectValue:(id)obj forTableColumn:(NSTableColumn *)col row:(NSInteger)rowi
{
    NSString *colid = [col identifier];
    if (tv == racerTableView) {
        NHRacers *racer = [racerList objectAtIndex:rowi];
        [racer setValue:obj forKey:colid];
    }
    else if (tv == vehicleTableView){
        NHVehicles *vehicle = [vehicleList objectAtIndex:rowi];
        [vehicle setValue:obj forKey:colid];
    }
    else
        nil; // something wrong here...    
    [self updateChangeCount:NSChangeDone];
}

テーブルビューのデータソースの出口は、ファイルの所有者に設定されており、ファイルの所有者は、IBにおけるそれぞれの「テーブル表示」にvehicleTableViewとracerTableViewを設定しています。たcolid鍵チェックは、識別子(「アイデンティティ・インスペクタ」が示されている「同一性」の下のテーブルのビューの列を選択することにより、IBで設定は、ドロップダウン)。これらの値は、テーブルビューに表示されているクラスのKVC(キーコード準拠)特性となるように選択した:小文字を使用する最初の文字(残りのリンゴのドキュメントを参照)

例: (NHVehicles.hで)

@interface NHVehicles : NSObject
{
    NSUInteger entry;
    NSString *name;
    NSString *vehicleClass;
}
@property NSUInteger entry;
@property NSString *name, *vehicleClass;
@end

(NHVehicles.mで)

@implementation NHVehicles
@synthesize entry, name, vehicleClass;
@end

本のtableView、 "エントリ" は、 "名前" と "vehicleClass" は、それぞれの列の識別子フィールドに(「O / W)型指定されたことになる。

あなたはクラスのいくつかのデータを表示したくない場合は、

は、単に列識別子のためのキーを入力しないでください。注意の言葉:私はXcodeの4.5.1を使用していますが、私は特定の列識別子のためのいくつかのキーを入力し、その後についての私の考えを変えて、テキストをクリアしようとしていた後、私はからテキストを削除したとき、それは訴えていることに気づきました識別子フィールド(私はもはや私が編集していた列のフィールドを空白にしておくことができませんでした)。これは回避することは困難ではなかったが、それは驚きだった。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top