我仍然在我的 Cocoa 小应用程序中与基于视图的 NSOutlineView 作斗争。我正在尝试在查找器之后对我的 OutlineView 进行建模。当 Finder OutlineView 失去焦点(例如单击右侧的任何文件夹)时,所选行(例如桌面)将保持选中状态并具有亮蓝色渐变,并且不会更改为非活动的蓝灰色渐变。
我想在我的应用程序中复制此行为。
在不基于视图的 OutlineView 中,我能够继承 NSOutlineView 并重新实现(void)highlightSelectionInClipRect:(NSRect)clipRect
,这样每个突出显示的行都可以提供亮蓝色背景图像。
但是,现在使用我基于视图的 OutlineView(设置为 SourceList 样式),显然甚至没有调用此方法。我什至已经实施了(id)_highlightColorForCell:(NSCell *)cell
正如某些网站所建议的那样,返回 nil,但这也没有帮助。
关于如何在基于视图的 OutlineView 中设置突出显示渐变的任何提示?
您是否正在做任何可能会造成混乱的自定义绘图?据我所知,所有选择绘图均已正常为您处理,请查看TableViewPlayground 示例 http://developer.apple.com/library/mac/#samplecode/TableViewPlayground/Introduction/Intro.html(默认情况下不是源列表样式,但这是对 XIB 的简单更改)。
但如果失败了,根据 Mac OS X 10.7 文档条目highlightSelectionInClipRect:
注意:对于基于视图的表视图,不应对该方法进行子类化或重写。
相反,行绘图自定义应该通过子类化 NSTableRowView 来完成。
所以我认为(我没有尝试过任何一个)就像你想要子类 NSTableRowView 一样,覆盖drawSelectionInRect:
(有一个example http://developer.apple.com/library/mac/#samplecode/TableViewPlayground/Listings/ATSampleWindowRowView_m.html在 TableViewPlayground 中,并绘制您的选择。您可以检查应用程序是否处于活动状态[NSApp active]
或者也许使用self.emphasized
像示例一样的属性。
然后,您可以在 NSOutlineViewDelegate 协议方法中返回自定义 NSTableRowView 之一(仅限 10.7!):(NSTableRowView *)outlineView:(NSOutlineView *)outlineView rowViewForItem:(id)item
希望这有效/有帮助!
我应该注意到 TableViewPlayground 示例使用outlineView:viewForTableColumn:item:
默认情况下委托方法并使用 NSTableViewCells 执行所有操作,但是如果添加rowViewForItem
我上面提到的方法is叫。所以我猜你可以用它来完整地返回每一行的视图。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)