使用基于视图的NSOutline的奇怪行为(Sourcelist)

时间:2011-07-25 10:17:28

标签: cocoa nsoutlineview

我的应用程序使用CoreData + NSTreeController + Bindings + NSOutlineView和一个Object作为NSOutlineViewDelegate,在我的应用程序中有一个基于视图的NSOutlineView作为Sidebar SourceList。(/ p>

我在outlineview委托中使用这些委托方法:

- (BOOL)outlineView:(NSOutlineView *)outlineView isGroupItem:(id)item 在我的情况下,当(核心数据)父关系为零时,项目是组。

- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item 返回headercell视图(group)或datacell视图(icon + text )。

我将大纲视图的大小样式(在XCode中的Interface Builder中)设置为“侧栏系统默认值”,以便当用户在系统首选项中更改大小视图时,单元格视图会更改其大小。

它工作正常......但有一些问题:

enter image description here

  • 第一个单元格视图是一个组单元格(标题单元格),当展开 - 折叠时,此单元格视图的文本字段向上移动。只发生在第一个。

  • 标题单元格中的文本字段会改变它的大小(当更改系统首选项中的大小时),但我希望标题单元格大小保持固定,如(Lion)Finder,Mail ...确实。

  • 标题单元格中文本字段的字符串值不会显示为大写。

  • 我在数据单元的图像视图中用作图标的图像显示为透明(具有0.5 alpha值或类似值)。

有任何帮助吗?提前致谢

解决:

  • 对于第一个细胞视图展开/折叠时的移动,使用方法 setFloatsGroupRows:NO 和outlineview(感谢Anton!)

  • 如果您想要groupcells字体的固定大小(即使用户在系统偏好设置中更改它),请在IB中取消绑定带有表格单元格视图的标题单元格。

  • 使用带有标题单元格的valueTransformer(将字符串转换为大写),字符串将显示为大写。您也可以使用nsoutlineview数据源方法 - outlineView:objectValueForTableColumn:byItem: ...

  • 最后,图标是半透明的,因为未启用。取消选中图像单元格绑定中的值或值路径中的“有条件设置已启用”(取决于您使用的那个)

4 个答案:

答案 0 :(得分:19)

为大纲视图设置 setFloatsGroupRows:NO 必须解决第一个组项目在展开/折叠时向上移动的问题。

答案 1 :(得分:2)

如果对任何人都不明显:

接口生成器中的

“浮动组行”:

您可以直接在Interface Builder中设置“浮动组行”。

  1. 在Interface Builder的文档大纲中选择源列表。

  2. 显示属性检查器,您将找到“Floats Group Rows”复选框。解开它,你讨厌的跳跃组标题突然表现得很好:)

  3. 在Swift中:

    或者,如果您在Swift中,您可以执行以下操作:

    @IBOutlet weak var sourceList: NSOutlineView!    
    sourceList.floatsGroupRows = false
    

答案 2 :(得分:0)

你也可以看一下这个问题的答案:NSOulineView header cell font自动样式取消选择重新选择舞蹈对我有用。

答案 3 :(得分:0)

我想知道你是如何实现屏幕截图中可见的源列表的。

我创建了一个小样本项目,它也做了同样的事情并包含来自@ anton-ivanov的反馈:

  • 显示项目列表
  • 以主从式方式编辑项目
  • 删除和添加项目
  • 绑定的用法

在github上查看besi/mac-quickies。 大部分内容可以在IB中完成,也可以在AppDelegate

中找到

screenshot