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