2012-04-26 8 views
2

Я хотел бы установить ключевой эквивалент элемента меню в IB для клавиши backspace (удалить левую часть курсора), но по какой-то причине это не кажется Работа. Я могу назначить ему все виды ключей, таких как CMD + Backspace или fn + Backspace (удалить ключ, т. Е. Удалить справа), но когда я назначаю простой backspace-ключ, он просто не регистрируется вообще.Какао: элемент меню с обратным пространством в качестве эквивалента ключа

Должен ли я сделать что-то другое, чтобы использовать клавишу backspace?

PS: Я не хочу обращаться с ключом любым другим способом. Это должен быть эквивалент ключа меню.

EDIT: Я установил эквивалент ключа для пункта меню, используя IB. Я знаю, что раньше это говорил, но некоторые люди не могут читать. Я знаю, как установить его в IB, и он работает на все, кроме клавиши backspace.

+0

Я нахожу ваш редактировать обижать. Не только ответ (только) дает вам ссылки и объяснения, но также предполагает, что у вас может быть конфликтный эквивалент ключа (после проверки того, что он правильно работает над созданием тестового проекта, вы даже это сделали?). Вы ** можете читать? – Vince

+0

Это было 3 года назад. Расслабьтесь. – mtmurdock

ответ

10

Пожалуйста, обратитесь к описанию setKeyEquivalent: метода в NSMenuItem Class Reference:

Если вы хотите, чтобы указать ключ Backspace как ключевой эквивалент для пункта меню, используйте одну строку символов с NSBackspaceCharacter (определенным в NSText.h как 0x08), а для клавиши прямого удаления используйте NSDeleteCharacter (определено в NSText.h как 0x7F). Обратите внимание, что это не те же символы, которые вы получаете от события нажатия клавиши NSEvent при нажатии этих клавиш.

Кстати, я могу нормально установить ключ Эквивалент для элементов меню в забой в Interface Builder, нажав на нее, и она работала в моем образце приложения (созданного на основе шаблона Xcode, набор ключей эквивалент File-Close для забой). Я использую Xcode 4.2 на Snow Leopard. Существуют ли в вашем сценарии конфликты с ключевыми связями?

+0

Я делаю это в построителе интерфейса, и я попытался установить там эквивалент ключа, но это не сработало. Кто-нибудь знает, что может помешать ему привязываться? – mtmurdock

0

Это старый, но у меня была такая же проблема, и это убивало меня. Оказывается, когда я устанавливал обработчик keyDown, я не вызывал super.keyDown (theEvent) в конце. Каким-то образом ярлыки с несколькими ключами (например, cmd + delete) по-прежнему запускали события, но односимвольный обратный пробел не выполнялся.

Это зафиксировал его:

override func keyDown(theEvent: NSEvent) { 
    ... 
    super.keyDown(theEvent) 
}