我有一个基于视图的NSOutlineView,绑定了NSTreeController。一切似乎都正常工作,直到我在委托中实现了outlineView:isGroupItem:方法,然后组标题突然停止显示。就像这样:
我确认如果我将NSOutlineView更改为基于单元格,则组项会正确显示。类似的行为也适用于NSTableView。有人遇到过这个问题吗?
![enter image description here](https://istack.dev59.com/Vqs2h.webp)
问题已解决!
结果发现我需要在 NSOutlineView
委托中实现以下方法:
- (NSView *)outlineView:(NSOutlineView *)outlineView
viewForTableColumn:(NSTableColumn *)tableColumn
item:(id)item {
if ([self outlineView:outlineView isGroupItem:item]) {
NSString *vId = [[[outlineView tableColumns] objectAtIndex:0] identifier];
return [outlineView makeViewWithIdentifier:vId owner:self];
}
return [outlineView makeViewWithIdentifier:[tableColumn identifier] owner:self];
}
默认情况下,基于视图的NSOutlineView通过定位与列具有相同标识符的视图为表中的每个单元格生成视图。然而,在组项/组行的情况下,该行没有与其关联的tableColumn,因此视图变成nil并且不显示。
玩转苹果的TableViewPlayground示例项目真的很有帮助!强烈推荐!
补充:在接口构建器中,如果您添加Source List对象而不是Outline View,它将为您添加两个原型视图行。
这使您能够设计不同外观的标题和数据行,并通过其标识符在代码中引用它们。
当然,您也可以手动添加任意数量的原型视图行。
NSOutlineViewDelegate
文档中没有提及outlineView:viewForTableColumn:item:
方法? - zakdances