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

Azp*_*iri 18 cocoa nsoutlineview

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

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

- (BOOL)outlineView:(NSOutlineView*)outlineView isGroupItem:(id)item在我的例子中,当(核心数据)父关系为nil时,项目是组.

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

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

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

在此输入图像描述

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

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

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

  • 我在数据单元的图像视图中用作图标的图像看起来是透明的(具有0.5 alpha值或类似的值).

有帮助吗?提前致谢

解决了:

  • 对于第一个cellview展开/折叠时的运动,使用方法setFloatsGroupRows:NO with outlineview(感谢Anton!)

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

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

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

小智 21

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