Получение акцентированных символов в пользовательском NSView - PullRequest
2 голосов
/ 14 января 2011

В текстовых представлениях Mac OSX можно вводить акцентированные символы с помощью последовательности нажатий клавиш (например, option-e e, чтобы получить e-sharp).Есть ли способ получить доступ к этой функции в пользовательском NSView.В моем случае у меня есть класс, полученный из NSOpenGLView.Я реализовал автоответчик для keyDown: так что я могу получить символы Юникода, которые приходят от одного нажатия, но с последовательностями я просто получаю события для отдельных нажатий.Я надеялся, что interpretKeyEvents: из NSResponder поможет, но, похоже, это не так.

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

Ответы [ 2 ]

1 голос
/ 18 января 2011

Вызов interpretKeyEvents: это правильный путь, но вам также необходимо реализовать другие методы, которые будут уведомлять вас, когда отмеченный текст (который я всегда называл «выполняемым текстом») или текст, который нужно вставить, появляется в вашем представлении

Ваш NSView должен реализовывать NSTextInputClient. См. Ссылку Какао здесь . Поиск некоторых методов в этом протоколе обнаружил этот кусок кода на github. которая выглядит как очень хорошая отправная точка.

Для того, что вы просите, будет достаточно проверить английский и хотя бы еще один западный язык (хороший французский). Но в долгосрочной перспективе вы также захотите провести тестирование по крайней мере с одним из макетов Котоэри и Хангул. Однако код, на который я ссылался выше, выглядит так, как будто он будет обрабатывать подавляющее большинство текста, который вы можете добавить.

1 голос
/ 14 января 2011

Хмммм ... это звучит довольно сложно.

NSTextField делает довольно похожие вещи, поскольку не имеет своих собственных средств редактирования, а скорее делегирует их "редактору полей" родительского окна, который является экземпляромневидимый NSTextView.Вы также получаете много поведения NSTextView без окна в NSText.

Это может стоит проверить, как NSTextFields делегирует редактору полей и посмотреть, можете ли вы подключиться к редактору полейтаким же образом, вместо того, чтобы делать keyDown: events.

Другой возможностью может быть создание невидимого NSTextView и делегирование каждого нажатия клавиши для него, а затем отображение NSTextStorage, связанного с ним, в вашем собственном представлении.

Звучит так, будто вас мучает небольшая боль, но я бы начал с изучения.

Конечно, я не являюсь мастером текстовой подсистемы Какао ..

Iнадеюсь, это поможет.

...