gpt4 book ai didi

macos - NSOutlineView 自定义单元格 View ,无需使用 NSTableRowView

转载 作者:行者123 更新时间:2023-12-03 17:35:41 27 4
gpt4 key购买 nike

我想知道如何在 NSOutlineView 中设置所选项目的背景。通过将 SelectionHighlightStyle 设置为 NSTableViewSelectionHighlightStyleSourceList,我获得了标准的深蓝色突出显示模式。

我能够更改所选NSTextFieldCell的背景,但该行背景的左侧部分仍然是标准蓝色。此外,我无法定义渐变。

所以我发现我必须使用自定义 View 并找到NSTableRowView。但由于我正在开发 10.6.8,我想知道是否还有其他可能性来创建自定义渐变突出显示样式。更好的是整体使用 NSTableRowView 的替代方法。

我没有在任何类引用或委托(delegate)中找到任何信息来实现这一点。如果没有这样的事情,那么Apple是如何设计和开发XCode 4.2中的源列表的呢?蓝色更浅,顶部元素有两行线。

最佳答案

基于 View 的 NSTableViews/NSOutlineViews 仅适用于 10.7 及更高版本,因此如果您尝试支持 10.6.8,则任何使用 NSTableRowView 的解决方案都将不起作用。我这样做的方法是使用自定义 NSOutlineView 子类。然后覆盖 -highlightSelectionInClipRect:-drawBackgroundInClipRect:。在 -highlightSelectionInClipRect: 中,您将为所选行绘制渐变突出显示,您可以使用 -selectedRowIndexes-rectOfRow 获得该效果>.

完成这一切的代码不会非常简单,但我之前已经完成过,所以这绝对是可能的。一度让我非常头疼的一个问题是,在内部, -drawBackgroundInClipRect: 是直接从 -[NSOutlineView drawRect] 调用的通过-[NSClipView drawRect]。该方法的调用者确定 clipRect 参数所在的坐标空间。您可以使用以下代码片段来确保它位于 NSTableView 的坐标空间中:

- (void)drawBackgroundInClipRect:(NSRect)clipRect
{
clipRect = [self convertRect:clipRect fromView:[NSView focusView]];

// Now do your background drawing.
// Easy if it's a solid background, more complex if you want alternating row colors
}

尽管如此,如果您可以继续使用基于 View 的 NSTableView/NSOutlineView 并放弃对 10.6 的支持,这会变得容易得多。在这种情况下,您根本不必子类化 NSOutlineView,并且可以在简单的 NSTableRowView 和 NSTableCellView 子类中完成所有自定义绘图。

关于macos - NSOutlineView 自定义单元格 View ,无需使用 NSTableRowView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9575698/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com