私はCocoaを初めて使い慣れていますが、経験豊かなプログラマー(主にC、C++、.NET、QT)です。私はソースリストを実装しています。ソースリストは、通常はファインダーとiTunesで表示されるサイドバーです。私は非常に基本的なテストケースを使用してそうしようとしています。したがって、CoreData、TreeControllerなどはありません。NSOutlineViewとNSTableCellViewを使用した基本的なソースリストの実装
私はNSOutlineViewDataSourceを実装しました。以下は私のコードです:
@implementation OutlineViewDataSource
- (id)init
{
self = [super init];
if (self) {
header = [[NSString alloc] initWithString: @"Header"];
child1 = [[NSString alloc] initWithString: @"Child 1"];
child2 = [[NSString alloc] initWithString: @"Child 2"];
child3 = [[NSString alloc] initWithString: @"Child 3"];
}
return self;
}
- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item
{
if (item == nil)
{
return header;
}
else
{
if (index == 0)
{
return child1;
}
if (index == 1)
{
return child2;
}
if (index == 2)
{
return child3;
}
}
return nil;
}
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item
{
if (item == nil)
{
return YES;
}
if (item == header)
{
return YES;
}
return NO;
}
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item
{
if (item == nil)
{
return 1;
}
if (item == header)
{
return 3;
}
return 0;
}
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
{
if (item == nil)
{
return @"";
}
return item;
}
@end
私のxibファイルは基本的なものです。そのソースリスト(NSOutlineViewはソースリストのように構成されています。また、あらかじめ設定された2つのNSTableCellViewsが付属しています)
このコードをソースリスト私はソースリストをビューベースに設定すると、私は奇妙な動作をします。NSTableCellViewsは表示されません。しかし、展開ボタンは、表示されません。さらに、objectValueForTableColumn関数は実行されません。別のNSTableCellViewをxibのソースリストに追加すると、NSTableCellViewが表示され、しかし、私はアイコンやテキストを変更することはできません、objectValueForTableColumnはまだ実行されません。私はviewForTableColumnを実装しようとしましたが、そのf召喚されたこともない。
私は間違っています。私は近くにいるように感じますが、私は何か基本的なものを欠いています。前もって感謝します。
問題を解決できましたか?私は同じ問題に遭遇しました。 –