Мне нужно использовать длину NSRange последнего выделения в тексте (в NSTextView) до изменения текста. Для этого я использую Уведомления следующим образом:
override func viewDidLoad()
{
NotificationCenter.default.addObserver(self, selector: #selector(self.textIsChanged(_:)), name:NSText.didChangeNotification, object: myTextView)
NotificationCenter.default.addObserver(self, selector: #selector(self.textWillBeChanged(_:)), name:NSText.didBeginEditingNotification, object: myTextView)
}
var lengthOfSelection = Int()
@objc func textWillBeChanged(_ notification: Notification)
{
lengthOfSelection = myTextView.selectedRange().length
}
@objc func textIsChanged(_ notification: Notification)
{
lengthOfSelection //this variable is used here
}
Проблема заключается в том, что при выделении и удалении текста значение lengthOfSelection
не на 100% правильно в функции textIsChanged
. Т.е. иногда он равен нулю, тогда как выделение удаленного текста не было нулевым до того, как текст изменился, и lengthOfSelection
не должно быть равным нулю.
Обновление.
I узнал, откуда я получаю неожиданный ноль. Это тот случай, когда:
текст из Pasteboard вставляется в позицию (с нулевой длиной выделения), а затем, когда я удаляю где-то выделенную часть текста, я получаю NSRange позиции, где предыдущий вставка была вставлена. Так что на самом деле это не последний выбор, а один перед последним.
Теперь вопрос, почему? Как это может быть ? И что я могу сделать, чтобы действительно получить NSRange последнего выбранного текста?