新しいプログラムのソースリストを作成しようとしていますが、ビューベースのNSOutlineViewを使用して少し問題があります。私のコードは、セルベースのNSOutlineViewを使用して正常に動作するので、何が起こっているのか少し混乱しています。私は、デバッガを介してこれを実行すると、それはoutlineView:objectValueForTableColumn:byItem:
が実行されないことがわかりoutlineView:objectValueForTableColumn:byItem:not called
#pragma mark -
#pragma mark NSOutlineView Delegate
- (BOOL)outlineView:(NSOutlineView *)outlineView isGroupItem:(id)item {
return (item == nil) ? YES : [(SourceListNode *)item groupItem];
}
- (id)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
if ([(SourceListNode *)item groupItem]) {
return [outlineView makeViewWithIdentifier:@"HeaderCell" owner:self];
}
else {
return [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
}
}
#pragma mark -
#pragma mark NSOutlineView Data Source
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
return (item == nil) ? [sourceListNodes count] : [(SourceListNode *)item numberOfChildren];
}
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
return (item == nil) ? YES : ([(SourceListNode *)item numberOfChildren] > 0);
}
- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
return (item == nil) ? [sourceListNodes objectAtIndex:index] : [(SourceListNode *)item childAtIndex:index];
}
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
return [(SourceListNode *)item name];
}
:
はここでデリゲートとデータソースのために私のコードです。結果はテキストのないアウトラインビューになります。正しいセルが作成され、それらを選択して展開することができます。私は何が欠けていますか?
UPDATE:IBでソースリストを削除し、新しいリストを追加してコントローラオブジェクトに接続しました。結果は良好でしたが、ヘッダーセルにはテキスト "HEADER CELL"があり、子セルには "Table View Cell"がありました。
もう一度デバッガでプログラムを実行しましたが、今度はoutlineView:objectValueForTableColumn:byItem:
が実行されました。それは、しかし、細胞のテキストを入力しませんでした。
次のように私はその後outlineView:viewForTableColumn:item:
を更新:
- (id)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
NSTableCellView *result;
if ([(SourceListNode *)item groupItem]) {
result = [outlineView makeViewWithIdentifier:@"HeaderCell" owner:self];
}
else {
result = [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
}
[[result textField] setStringValue:[(SourceListNode *)item name]];
return result;
}
期待通りに今すぐすべての作品。
要するに、私は私の問題を解決しました。しかし、今私は別の質問があります。ビューベースのアウトラインビューにはoutlineView:objectValueForTableColumn:byItem:
の目的は何ですか?実行されますが、何もしないように見えます。
こんにちはJohn、ビューベースのアウトラインビューでobjectValueForTableColumnが必要な理由を理解しましたか?私は自分自身も同じことを思っています。 – Indoor