我遇到了最奇怪的问题:
我在 NSScrollView 中有一个带有自定义 NSView 的 Cocoa 应用程序。
当我单击文本字段时,drawRect:
每次光标闪烁时都会在我的自定义视图中调用。
如果我将自定义视图移到滚动视图之外,问题就会消失。此外,如果我将测试视图放在其父视图的最底部,问题就会消失。
这不是为什么 textfield 中的闪烁光标会导致调用 drawRect 的副本?,这是同样的问题,但我没有覆盖hitTest:
. 事实上,我的测试视图实现如下所示:
class TestView:NSView
{
override func draw(_ dirtyRect: NSRect) {
NSColor.red.set()
dirtyRect.fill()
logWarning("drawRect in custom view called. dirty rect: \(NSStringFromRect(dirtyRect))")
}
}
我的视图层次结构:
NSWindow
NSSplitView
NSView
NSVisualEffectView
NSTabView
NSView
NSScrollView
NSView
TestView
它似乎是 NSVisualEffectView 和 NSScrollView 的组合。我无法在新项目中重现这一点。我尝试在我现有的应用程序中重新调整视图,但我无法确定这一点。
实际问题:
请注意drawRect:
,一旦文本字段具有焦点并在我单击外部时停止,它就会被调用。我不明白为什么每个插入符号脉冲都必须重新绘制不相关的视图。