我的应用程序使用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中)设置为“侧栏系统默认值”,以便当用户在系统首选项中更改大小视图时,单元格视图会更改其大小。
它工作正常......但有一些问题:
第一个单元格视图是一个组单元格(标题单元格),当展开 - 折叠时,此单元格视图的文本字段向上移动。只发生在第一个。
标题单元格中的文本字段会改变它的大小(当更改系统首选项中的大小时),但我希望标题单元格大小保持固定,如(Lion)Finder,Mail ...确实。
标题单元格中文本字段的字符串值不会显示为大写。
我在数据单元的图像视图中用作图标的图像显示为透明(具有0.5 alpha值或类似值)。
有任何帮助吗?提前致谢
解决:
对于第一个细胞视图展开/折叠时的移动,使用方法 setFloatsGroupRows:NO 和outlineview(感谢Anton!)
如果您想要groupcells字体的固定大小(即使用户在系统偏好设置中更改它),请在IB中取消绑定带有表格单元格视图的标题单元格。
使用带有标题单元格的valueTransformer(将字符串转换为大写),字符串将显示为大写。您也可以使用nsoutlineview数据源方法 - outlineView:objectValueForTableColumn:byItem: ...
最后,图标是半透明的,因为未启用。取消选中图像单元格绑定中的值或值路径中的“有条件设置已启用”(取决于您使用的那个)
答案 0 :(得分:19)
为大纲视图设置 setFloatsGroupRows:NO 必须解决第一个组项目在展开/折叠时向上移动的问题。
答案 1 :(得分:2)
如果对任何人都不明显:
接口生成器中的您可以直接在Interface Builder中设置“浮动组行”。
在Interface Builder的文档大纲中选择源列表。
显示属性检查器,您将找到“Floats Group Rows”复选框。解开它,你讨厌的跳跃组标题突然表现得很好:)
或者,如果您在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
中找到