Как очистить выбор NSTextView, не становясь первым респондентом? - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть базовое приложение Какао с числом NSTextView с. Когда текстовое представление теряет фокус (то есть отказывается от статуса первого респондента), я бы хотел отменить его выбор.

Моя стратегия заключалась в расширении NSTextView и переопределении resignFirstResponder():

override func resignFirstResponder() -> Bool {

    // Both result in the text view becoming first responder again:
    clearSelection(nil)
    setSelectedRange(NSRange(location: 0, length: 0))

    return super.resignFirstResponder()
}

Проблема в том, что при вызовах clearSelection() и setSelectedRange() текстовое представление снова становится первым респондентом.

Есть ли способ отменить выбор, не став первым респондентом?

Я также пытался переопределить acceptsFirstResponder и временно вернуть false, но это тоже не сработало.

1 Ответ

0 голосов
/ 09 ноября 2018

Сегодня встретил ту же проблему и нашел решение

Вы можете сделать setSelectedRange в методе делегата NSTextView textDidEndEditing, и это не заставит NSTextView стать первым респондентом.

class TextView: NSTextView {
    init() {
        self.delegate = self
        ....
    }
    ....
}

extension TextView: NSTextViewDelegate {
    public func textDidEndEditing(_ notification: Notification) {
        setSelectedRange(NSMakeRange(string.count, 0))
    }
}
...