我正在尝试完全使用代码来创建源列表。我一直在研究SideBar演示和各种SO问题/答案,并且已经接近成功,但还没有完全解决。我复制了下面的代码,它似乎可以构建一个视图,其中有3个空单元格可以选择。我无法弄清楚的是如何在这些单元格中显示我的文本。最终我将用自己的视图替换它,但现在我只想让股票渲染工作。
在我的控制器中:
在我的控制器中:
@implementation SourceListController {
NSScrollView *_scrollView;
NSOutlineView *_sourceList;
SourceListDataSource *_sourceListDataSource;
}
- (void)loadView {
_scrollView = [[NSScrollView alloc] init];
_sourceList = [[NSOutlineView alloc] init];
_sourceListDataSource = [[SourceListDataSource alloc] init];
[_sourceList setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleSourceList];
NSTableColumn *c = [[NSTableColumn alloc] initWithIdentifier: @"Column"];
[c setEditable: NO];
[c setMinWidth: 150.0];
[_sourceList addTableColumn: c];
[_sourceList setOutlineTableColumn:c];
[_sourceList setDelegate:_sourceListDataSource];
[_sourceList setDataSource:_sourceListDataSource];
[_scrollView setDocumentView:_sourceList];
[_scrollView setHasVerticalScroller:YES];
[_sourceList reloadData];
NSLog(_sourceList.dataSource == _sourceListDataSource ? @"YES" : @"NO");
self.view = _scrollView;
}
在我的数据源/代理中:
@implementation SourceListDataSource {
}
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
return item == nil ? 3 : 0;
}
- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
return [NSObject new];
}
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
return item == nil;
}
- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
NSLog(@"Here %f", tableColumn.width);
NSTableCellView *result = [[NSTableCellView alloc] init];
NSTextField *textField = [[NSTextField alloc] init];
[textField setStringValue:@"Test"];
[result addSubview:textField];
return result;
}
更新:进一步调查告诉我viewForTableColumn甚至没有被调用。我对此感到困惑。
更新2:我发现问题出在缺少列和outlineTableColumn导致未调用委托方法。我修复了这个问题并更新了代码,但仍然没有文本显示。
textField
的属性。也许这样就可以了。你添加的字段没有框架,因此无法显示。 - Volker