Как установить первый респондент для NSTextView в Swift?

Изменить: в проекте MacOS

У меня есть простой ViewController, который я отображаю как всплывающее окно в приложении меню элемента состояния.

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

mainTextField.insertText(newStr, replacementRange: theRange)

(Я использую insertText для записи изменений в менеджере отмены)

Затем я выделяю текст:

// create the new NSRange
let range = NSRange(location: startRange, length: newStrLength)

// select the range in field
mainTextField.selectedRange = range

Все работает нормально, за исключением того, что текст выделен, но светло-серым вместо обычного небесно-голубого цвета, что указывает на то, что элемент управления не является первым респондентом. И когда я нажимаю на поле, выбор исчезает.

На самом деле я хотел бы, чтобы NSTextView стал первым респондентом, чтобы я мог напрямую скопировать выделенный текст.

Редактировать: если я нажимаю клавишу Tab на клавиатуре, я получаю textView, чтобы стать первым респондентом (и серый выбор становится стандартным небесно-голубым).

1 ответ

Решение

Исправленный ответ

В AppKit вам нужно:

if mainTextField.acceptsFirstResponder {
    mainTextField.window?.makeFirstResponder(mainTextField)
}

В этом случае, вероятно, безопасно не проверять acceptsFirstResponder, но это тоже не больно.

Оригинальный ответ (UIKit)

Вам нужно позвонить mainTextField.becomeFirstResponder(),

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