始终在NSOutlineView中显示显示三角形,即使是空条目

时间:2015-04-17 07:13:44

标签: cocoa cocoa-bindings nsoutlineview appkit

我有一个应用程序,显示"章节和页面"在NSOutlineView

向用户说明"章节"可以包含"页面",我希望大纲视图始终显示章节的显示三角形,即使它们中没有页面(即为空)。

以下是一个例子:

enter image description here

注意第一章是空的(没有页面)并且没有公开三角形。

我希望显示三角形,以便当用户点击它时,他们会发现这是一个"容器"可以包含其他项目的项目。

我尝试实现各种委托方法,但无法显示空白条目的显示三角形。

示例项目:https://www.dropbox.com/s/fdggjod78t0isjr/OutlineViewTest.zip?dl=0

2 个答案:

答案 0 :(得分:3)

好的,现在我明白了。你正在使用Cocoa Bindings,它假设不应该调用某些dataSource方法。显示在NSOutlineViewDataSource reference page

  

' - (BOOL)outlineView:(NSOutlineView *)outlineView      isItemExpandable:(ID)项“

     

重要

     

虽然此方法在协议中标记为@optional,但如果未使用Cocoa绑定提供大纲视图的数据,则必须实现此方法。

尝试在没有Cocoa Bindings的情况下实现它。或者你可以找到进入绑定过程的方法,并找出如何拒绝披露按钮删除。

是的,还有第三种方式。您也可以创建MyTableCellView.xib并添加自己的公开按钮。

<强> UPD

要确定哪个项目应具有显示三角形,Leaf属性检查器标签上有Tree Controller个关键路径。

enter image description here

不要忘记将模型的值添加到您的数据中

@{@"title": @"Chapter 1 (empty)", @"isLeaf":@(NO)}

enter image description here

答案 1 :(得分:1)

您需要实施NSOutlineViewDelegate outlineView:shouldShowOutlineCellForItem:并让它返回YES。

- (BOOL)outlineView:(NSOutlineView *)outlineView shouldShowOutlineCellForItem:(id)item {
    return YES;
}

&#34;大纲单元&#34;是披露三角形。除之外,您还需要isExpandable返回YES。

method's reference说:

  

返回“否”会导致frameOfOutlineCellAtRow:返回NSZeroRect

并且the 1st answer here about how to change the triangle image似乎表明 frame 用于基于单元格和基于视图的大纲视图,因此此方法应该适用于两者。 (请注意,更简单的解决方案是那里的第二个答案。)

这个答案是wiki ......我怀疑我错过了什么。