在我的小型 Cocoa 应用程序中,我仍在努力使用基于 View 的 NSOutlineView。我正在尝试在取景器之后为我的 OutlineView 建模。当 Finder OutlineView 失去焦点时(例如单击右侧的任何文件夹),所选行(例如桌面)保持选中状态并具有亮蓝色渐变并且不会更改为非事件蓝灰色渐变。
我想在我的应用程序中复制此行为。
在一个非基于 View 的 OutlineView 中,我能够继承 NSOutlineView 并重新实现 (void)highlightSelectionInClipRect:(NSRect)clipRect
,这样每个突出显示的行都可以提供明亮的蓝色背景图像。
但是,现在我的基于 View 的 OutlineView(设置为 SourceList 样式)显然甚至没有调用此方法。我什至实现了 (id)_highlightColorForCell:(NSCell *)cell
以返回 nil,正如某些网站所建议的那样,但这也无济于事。
关于如何在基于 View 的 OutlineView 中设置突出显示渐变的任何提示?
最佳答案
您是否正在做任何可能会弄乱事情的自定义绘图?据我所知,所有选择图都已正常为您处理,请查看 TableViewPlayground example (默认情况下不是源列表样式,但这是对 XIB 的简单更改)。
但失败了,根据 highlightSelectionInClipRect:
Note: This method should not be subclassed or overridden for a view-base table view. Instead, row drawing customization should be done by subclassing NSTableRowView.
所以我认为(我还没有尝试过这些)就像你想要子类化 NSTableRowView,覆盖 drawSelectionInRect:
(TableViewPlayground 中有一个 example,并绘制你的选择。你可以使用 [NSApp active]
检查应用是否处于事件状态,或者像示例一样使用 self.emphasized
属性。
然后您将在 NSOutlineViewDelegate 协议(protocol)方法中返回您的自定义 NSTableRowViews 之一(仅限 10.7!):(NSTableRowView *)outlineView:(NSOutlineView *)outlineView rowViewForItem:(id)item
/p>
希望这有效/有帮助!
我应该注意,TableViewPlayground 示例默认使用 outlineView:viewForTableColumn:item:
委托(delegate)方法,并使用 NSTableViewCells 执行所有操作,但如果您添加我提到的 rowViewForItem
方法在它上面被调用。所以我猜你可以用它来完整地返回每一行的 View 。
关于objective-c - 基于 View 的 NSOutlineview 选择渐变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7214314/