0

我遇到了最奇怪的问题:

我在 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:,一旦文本字段具有焦点并在我单击外部时停止,它就会被调用。我不明白为什么每个插入符号脉冲都必须重新绘制不相关的视图。

4

0 回答 0