【发布时间】:2012-01-16 21:58:20
【问题描述】:
这是我在这里的第一个问题,我会尽量做到清楚。
我想在基于视图的 NSTableView 中的选定行上绘制自定义渐变,同时添加微妙的凸起效果。为此,我需要为所选行之前和之后的网格线使用较深的颜色(例如,请参阅here)。我已经覆盖了 NSTableRowView 中的drawSeparatorInRect: 方法来为选定的行绘制自定义分隔线(使用isSelected 方法作为标志),但我不能对上面/下面的行做同样的事情(因为我在底部/顶部画线)。
我尝试了几种方法来告诉最近的行它应该绘制一条较暗的分隔线但没有成功,因为显示步骤不遵循相同的顺序(我在drawSeparatorInRect: 中使用 NSLogs 检查了它,似乎当你滚动一点时,这个顺序会改变)。所以,有时(主要是在滚动之后)该行不知道它应该使用较深的颜色,因为它在所选行之前绘制自己(我认为此时,所选行还不知道它已被选中,否则我不明白发生了什么)。
我尝试过的一些事情:
- 在所选行的
drawSeparatorInRect:方法中,我尝试访问兄弟视图 ([superview subviews]) 并强制上一个/下一个重新绘制自己。 - 从
NSTableView子类中,当selectedIndexes 更改时直接修改最近的行。 - 从其
drawSeparatorInRect:方法中在选定行之外绘制线,显示here。
请注意,我这样做是有:一个行视图询问是否选择了上一个/下一个,一个 closestRowIsSelected 标志或外部调用一个方法来“强制”深色。
我现在所拥有的是选定的行同时绘制了顶部和底部边框,因此其中一个被放置在上一行/下一行中......它很微妙,但它仍然存在。
任何帮助都会受到欢迎。
提前谢谢你。
!我没有发布任何代码,因为问题不存在(它只是用红色调用[NSBezierPath fillRect:rect]),我想......所以我没有什么可显示的。
【问题讨论】:
标签: cocoa nstableview