2013-07-31 1 views
1

Я работаю над приложением Status Bar. Я хотел бы разрешить пользователю изменять эквиваленты ключей элемента меню в соответствии с их собственными предпочтениями. Я видел это, прежде чем это довольно распространенная функция. Окно prefs обычно имеет область с текстовыми полями, где пользователь вводит комбинацию клавиш для определенных пунктов меню.Пользовательские эквиваленты ключей

Как настроить текстовое поле так, чтобы оно отображало шрифты ключа-модификатора? По умолчанию NSTextfield игнорирует модификаторы.

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

+0

Обновление: присмотревшись в некоторых приложениях, которые предлагают эту функцию, я заметил, что область, в которой вводится ярлык не текстовое поле. Это может быть небольшое представление, которое захватывает и обрабатывает нажатия клавиш. – vcirilli

ответ

2

Возможно, вы захотите ознакомиться с ярлыком, который позволяет пользователю записывать эквиваленты ключей с помощью модификаторов, а затем для их извлечения и установки для NSMenuItem.

После того, как у пользователя есть рекордер с комбинацией клавиш/клавиш, вы можете получить доступ к свойству SRRecorderControlobjectValue, которое имеет значения для флагов кода ключа и модификатора.

https://github.com/Kentzo/ShortcutRecorder

0

Все ключи модификатора имеют значения Unicode, которые вы можете увидеть в палитре «Специальные символы», и они отображаются обычным системным шрифтом. Большинство из них находятся в категории «Технические символы» палитры, но стрелки вверх для клавиш Shift и Caps Lock находятся в разделе «Стрелки».

Эти значения можно вставлять при редактировании элементов ярлыков в Interface Builder или Xcode или включать их соответствующие значения Unicode при создании чего-то вроде объекта NSString.

Например, UTF-8 последовательность смены ключа (как показано в палитре) является E2 87 A7 так один из способов установить его программно, это добавить эти байты в массив и создать NSString из массива UTF-8. Я предпочитаю подход массива, потому что он «пуленепробиваемый»; он всегда будет интерпретироваться как UTF-8 и делать то, что вы ожидаете. Если вы попытаетесь вставить символы непосредственно в строки @"" или CFSTR(), вам необходимо убедиться, что кодировка исходного файла верна (и более ранние версии Xcode даже не позволяли бы этого, они предполагали бы только ASCII).

Смежные вопросы