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

Cocoa 使用基于视图的NSOutline(Sourcelist)的奇怪行为,cocoa,nsoutlineview,Cocoa,Nsoutlineview,在我的应用程序中,我使用CoreData+NSTreeController+Bindings+NSOutlineView和一个对象NSOutlineViewDeleteGate创建了一个基于视图的新NSOutlineView作为侧栏源列表 我在outlineview委托中使用这些委托方法: -(BOOL)outlineView:(NSOutlineView*)outlineView isGroupItem:(id)item在我的例子中,当(核心数据)父关系为nil时,项是组 -(NSView*)

在我的应用程序中,我使用CoreData+NSTreeController+Bindings+NSOutlineView和一个对象NSOutlineViewDeleteGate创建了一个基于视图的新NSOutlineView作为侧栏源列表

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

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

-(NSView*)大纲视图:(NSOutlineView*)大纲视图视图可折叠列:(NSTableColumn*)表格列项:(id)项返回标题单元格视图(组)或数据单元格视图(图标+文本)

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

它很好用。。。但有几个问题:

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

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

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

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

有什么帮助吗?提前谢谢

已解决:

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

  • 如果希望groupcells的字体大小固定(即使用户在系统首选项中更改),请在IB中取消标题单元格与其表格单元格视图的绑定

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

  • 最后,图标是半透明的,因为未启用。在图像单元格绑定的值或值路径(取决于您使用的路径)中取消选中“Conditionally Sets Enabled”


设置设置floatsGroupRows:NO对于大纲视图,必须解决第一组项目在展开/折叠时上下移动的问题。

您也可以看看这个问题的答案:自动样式取消选择重新选择舞蹈对我有效。

我想知道您是如何实现这一功能的源代码列表的在屏幕截图上可见

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

  • 显示项目列表
  • 以主细节方式编辑项目
  • 删除和添加项目
  • 绑定的使用
查看github。 大部分内容要么在IB中完成,要么可以在


如果对任何人来说都不明显:

界面生成器中的“浮动组行”: 您可以直接在Interface Builder中设置“浮动组行”

  • 在Interface Builder的文档大纲中选择源列表

  • 显示属性检查器,您将找到“浮动组行”复选框。解开它,你讨厌的跳跃群标题就会突然出现:)

  • 迅速: 或者,如果您使用Swift,您可以执行以下操作:

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

    这是一段“神奇”的代码。它工作得很好。谢谢安东!请告诉我们在组项目中显示不同图标的技巧?在我的项目中,我只能为所有子项设置相同的图标。谢谢