objective-c - 基于 View 的 NSOutlineview 选择渐变

标签 objective-c cocoa macos selection nsoutlineview

在我的小型 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:

上的 Mac OS X 10.7 文档条目

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/

相关文章:

macos - 使用非 native 库 (OpenCV) 在 OSX 上部署应用程序

macos - 有没有办法确定两个 IOHIDDeviceRef 是否属于同一设备?

objective-c - NSOutlineView:所选父项的索引

ios - touchesMoved 在 iPhone 6s 及以后的设备上被调用

swift - 如何在 Swift 中访问 NSMetadataItem 的文本内容 (kMDItemTextContent)?

objective-c - NSSegmentedControl -selectedSegment 始终返回 0

objective-c - 切换 View 问题

java - 单独线程中的屏幕捕获导致 Java 应用程序缓慢/无响应

objective-c - 停止 NSDictionary 对其项目进行排序

objective-c - 在 ios 中添加对象崩溃