Мигание курсора в NSTextField приводит к вызову drawRect: в пользовательском NSView

Я сталкиваюсь с самой странной проблемой:

У меня есть приложение Какао с пользовательским NSView внутри NSScrollView.

Когда я нажимаю в текстовое поле, drawRect: вызывается в моем пользовательском представлении каждый раз, когда курсор мигает.

Если я переместу свой пользовательский вид за пределы вида прокрутки, проблема исчезнет. Кроме того, если я помещу свое тестовое представление в самое нижнее его родительское представление, проблема исчезнет.

Это не дубликат Почему мигающий курсор в текстовом поле вызывает вызывание 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: вызывается, как только текстовое поле имеет фокус, и останавливается, когда я нажимаю снаружи. Я не понимаю, почему несвязанный вид должен перерисовываться с каждым импульсом каретки.

0 ответов

Другие вопросы по тегам