我有一个应用程序,显示"章节和页面"在NSOutlineView
。
向用户说明"章节"可以包含"页面",我希望大纲视图始终显示章节的显示三角形,即使它们中没有页面(即为空)。
以下是一个例子:
注意第一章是空的(没有页面)并且没有公开三角形。
我希望显示三角形,以便当用户点击它时,他们会发现这是一个"容器"可以包含其他项目的项目。
我尝试实现各种委托方法,但无法显示空白条目的显示三角形。
示例项目:https://www.dropbox.com/s/fdggjod78t0isjr/OutlineViewTest.zip?dl=0
答案 0 :(得分:3)
好的,现在我明白了。你正在使用Cocoa Bindings,它假设不应该调用某些dataSource
方法。显示在NSOutlineViewDataSource reference page
' - (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(ID)项“
重要
虽然此方法在协议中标记为@optional,但如果未使用Cocoa绑定提供大纲视图的数据,则必须实现此方法。
尝试在没有Cocoa Bindings的情况下实现它。或者你可以找到进入绑定过程的方法,并找出如何拒绝披露按钮删除。
是的,还有第三种方式。您也可以创建MyTableCellView.xib并添加自己的公开按钮。
<强> UPD 强>
要确定哪个项目应具有显示三角形,Leaf
属性检查器标签上有Tree Controller
个关键路径。
不要忘记将模型的值添加到您的数据中
@{@"title": @"Chapter 1 (empty)", @"isLeaf":@(NO)}
答案 1 :(得分:1)
您需要实施NSOutlineViewDelegate
outlineView:shouldShowOutlineCellForItem:
并让它返回YES。
- (BOOL)outlineView:(NSOutlineView *)outlineView shouldShowOutlineCellForItem:(id)item {
return YES;
}
&#34;大纲单元&#34;是披露三角形。除之外,您还需要为isExpandable
返回YES。
返回“否”会导致
frameOfOutlineCellAtRow:
返回NSZeroRect
并且the 1st answer here about how to change the triangle image似乎表明 frame 用于基于单元格和基于视图的大纲视图,因此此方法应该适用于两者。 (请注意,更简单的解决方案是那里的第二个答案。)
这个答案是wiki ......我怀疑我错过了什么。