У меня есть NSTextView
подкласс в качестве правого элемента в NSSplitViewController
, левая панель - NSOutlineView
.Чтобы обрабатывать щелчки мыши, пока командная клавиша нажата в текстовом представлении, я добавил следующее, чтобы найти глиф, находящийся под мышью:
override func mouseDown(with event: NSEvent) {
guard
let lm = self.layoutManager,
let tc = self.textContainer
else { return }
let localMousePosition = convert(event.locationInWindow, to: nil)
var partial = CGFloat(1.0)
let glyphIndex = lm.glyphIndex(for: localMousePosition, in: tc, fractionOfDistanceThroughGlyph: &partial)
print(glyphIndex)
}
Однако это приводит к индексу, равному примерно 10 илислишком высоко, таким образом, выбирая неправильный глиф.Мое текстовое представление содержит только символы с одним пробелом, поэтому смещение не вызывается дополнительными символами.
Интересно, что если я сверну левую панель (в коде или в раскадровке), я получу правильный индекс.Но смещение в направлении x больше ширины левой панели.
Чего мне здесь не хватает, есть ли ошибка в приведенном выше коде?