Я пытаюсь найти способ определить, нажата ли клавиша (на клавиатуре) на Swift. Любые идеи и предложения будут высоко оценены.Обнаружение события нажатия клавиши в Swift
ответ
Поскольку вы обновили свой вопрос и хотите узнать, как это сделать для окна, вот вам ответ. Подкласс NSWindow и вместо этого используйте этот подкласс.
Ваш пользовательский класс должен выглядеть следующим образом:
import Cocoa
class EditorWindow: NSWindow {
override func keyDown(event: NSEvent) {
super.keyDown(event)
Swift.print("Caught a key down: \(event.keyCode)!")
}
}
Если вы сделали окно в Interface Builder/XCode, щелкните объект окна и перейти к Attribute Inspector (⌥ + ⌘ +). Инспектор атрибутов будет находиться на боковой панели справа. Убедившись, что ваше окно выбрано в Interface Builder, в верхней части Attribute Inspector в области Custom Class
введите ваш новый класс в ввод класса.
Для того, чтобы связывать события из класса этого окна в моем приложение я добавить функцию к окну, которое принимает функцию обратного вызова, который я затем хранить в массиве функций обратного вызова. Я получаю доступ к этому окну через AppDelegate, который может получить слабую ссылку на текущее главное окно. Затем в приведенной выше функции я повторяю все обратные вызовы и вызываю их с помощью NSEvent в качестве аргумента. Я также сначала проверяю, нажаты ли сначала какие-либо командные клавиши, такие как клавиши выбора, через свойство modifierFlags
на мероприятии. Он заканчивает тем, как это:
import Cocoa
typealias Callback = (NSEvent) ->()
class KeyCaptureWindow: NSWindow {
var keyEventListeners = Array<Callback>()
override func keyDown(event: NSEvent) {
if event.modifierFlags.contains(NSEventModifierFlags.CommandKeyMask) {
super.keyDown(event)
return
}
for callback in keyEventListeners {
callback(event)
}
}
func addKeyEventCallback(callback: Callback) {
keyEventListeners.append(callback)
}
}
А потом в другом месте в моем коде у меня есть строка так:
let appDelegate = NSApplication.sharedApplication().delegate as! AppDelegate
let mainWindow = appDelegate.getWindow()
mainWindow.addKeyEventCallback(handleKeyEvent)
я добавил метод getWindow
в моем класс приложения делегата. Этот метод возвращает NSWindow
, отлитый от KeyCaptureWindow
. Там может быть лучший способ сделать все это, но это работает для меня. Другой способ сделать это - использовать первых респондентов и NSView
, но это не то, как я это делал.
Это действительно очень полезно, спасибо вам большое. – andertonslase
Если с компьютером подключено несколько клавиатур, можно ли идентифицировать клавиатуру, из которой только что пришли? – OrangePot
Последние версии Swift изменили функцию. Теперь это keyDown (с событием: NSEvent). Спасибо за ответ, очень информативно! –
Вам необходимо переопределить keyDown
-метод.
var direction:String = ""
override func keyDown(theEvent: NSEvent!) // A key is pressed
{
if theEvent.keyCode == 123
{
direction = "left" //get the pressed key
}
else if theEvent.keyCode == 124
{
direction = "right" //get the pressed key
}
println("Key with number: \(theEvent.keyCode) was pressed")
}
- 1. Обнаружение нажатия клавиши глобального модификатора в Swift
- 2. JS Обнаружение нажатия клавиши без объекта события
- 3. Обнаружение определенного нажатия клавиши
- 4. Обнаружение нажатия клавиши
- 5. Обнаружение нажатия клавиши backspace
- 6. Обнаружение CapsLock нажатия клавиши
- 7. Обнаружение нажатия клавиши на бумаге
- 8. Обнаружение нажатия клавиши в jsp
- 9. Обнаружение нажатия клавиши в консоли
- 10. Обнаружение * нажатия клавиши в wpf
- 11. Обнаружение многократного нажатия клавиши в Backbone
- 12. Обнаружение двойного нажатия клавиши в Objective-C
- 13. Множественное обнаружение нажатия клавиши wxPython
- 14. Обнаружение любого нажатия клавиши управления
- 15. C# простое обнаружение нажатия клавиши
- 16. Использование события нажатия клавиши наушника
- 17. Обнаружение нажатия одной клавиши в JavaFX
- 18. Обнаружение нажатия клавиши навигации в datagridview
- 19. Обнаружение нажатия клавиши в XNA 4.0?
- 20. обнаружение любого нажатия клавиши в applescript
- 21. Обнаружение только одного нажатия клавиши в C++
- 22. Обнаружение нажатия клавиши физического меню в Android
- 23. Опрос клавиатуры (обнаружение нажатия клавиши) в python
- 24. Обнаружение двойного нажатия клавиши в AutoHotkey
- 25. Обнаружение нажатия клавиши F10 в WPF
- 26. Python - обнаружение нажатия клавиши в оболочке
- 27. Обнаружение нажатия левой или правой клавиши в нажатие клавиши - JQuery
- 28. WebView обнаружение события нажатия кнопки
- 29. Создание события нажатия клавиши в wxWidgets программно
- 30. Обнаружение нажатия цифровой клавиши для оператора if
Что вы пытаетесь? –
Это не дубликат. Ответы Objective-C не являются дубликатами для вопросов Swift. –
В каком контексте вы хотели обнаружить нажатие клавиши? В окне? Вход? –