NSTableView複数のカラム
-
18-09-2019 - |
質問
何にかかわらず、全ての設定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を使用していますが、私は特定の列識別子のためのいくつかのキーを入力し、その後についての私の考えを変えて、テキストをクリアしようとしていた後、私はからテキストを削除したとき、それは訴えていることに気づきました識別子フィールド(私はもはや私が編集していた列のフィールドを空白にしておくことができませんでした)。これは回避することは困難ではなかったが、それは驚きだった。