Próbuję znaleźć sposób na wykrycie, czy klawisz (na klawiaturze) został naciśnięty na Swift. Wszelkie pomysły i sugestie będą bardzo mile widziane.Wykrywanie zdarzenia naciśnięcia klawisza w Swift
Odpowiedz
Ponieważ zaktualizowałeś swoje pytanie i chciałeś wiedzieć, jak to zrobić w oknie, oto odpowiedź. Podklasa NSWindow i zamiast tego użyj tej podklasy.
niestandardowej klasy powinien wyglądać następująco:
import Cocoa
class EditorWindow: NSWindow {
override func keyDown(event: NSEvent) {
super.keyDown(event)
Swift.print("Caught a key down: \(event.keyCode)!")
}
}
Po dokonaniu okno w konstruktorze Interface/XCode, kliknij obiekt okna i przejść do atrybutu Inspector (⌥ + ⌘ +). Inspektor atrybutu będzie na pasku bocznym po prawej stronie. Upewniając się, że okno jest wybrane w Konstruktorze interfejsów, w górnej części Inspektora atrybutów w obszarze Custom Class
umieść swoją nową klasę w danych wejściowych klasy.
W celu komunikowania się zdarzenie z klasy to okno do mojego app dodać funkcję do okna, które akceptuje funkcji zwrotnej, że następnie przechowywać w tablicy funkcji zwrotnych. Otrzymuję dostęp do tego okna poprzez AppDelegate, które może uzyskać słabe odniesienie do bieżącego okna głównego. Następnie w powyższej funkcji I iterować ogólnie wywołania zwrotne i wywołać je za pomocą argumentu NSEvent. Najpierw sprawdzam również, czy klawisze polecenia, takie jak klawisze opcji, są najpierw wciskane przez właściwość modifierFlags
w wydarzeniu. Kończy się patrzy tak:
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)
}
}
a potem gdzie indziej w moim kodu mam linię tak:
let appDelegate = NSApplication.sharedApplication().delegate as! AppDelegate
let mainWindow = appDelegate.getWindow()
mainWindow.addKeyEventCallback(handleKeyEvent)
dodałem metodę getWindow
do mojej klasy app delegata. Ta metoda zwraca rzutowanie NSWindow
na KeyCaptureWindow
. Może być lepszy sposób na zrobienie tego wszystkiego, ale to działa dla mnie. Innym sposobem, aby to zrobić, jest skorzystanie z pierwszej odpowiedzi i NSView
, ale to nie jest sposób, w jaki to robię.
To jest naprawdę bardzo pomocne, dziękuję bardzo. – andertonslase
Jeśli do komputera podłączonych jest wiele klawiatur, czy możliwe jest określenie, z której klawiatury pochodzi? – OrangePot
Ostatnie wersje Swiftu zmodyfikowały tę funkcję. To teraz keyDown (z wydarzeniem: NSEvent). Dzięki za odpowiedź, bardzo pouczające! –
Musisz zastąpić metodę 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. wykrywanie naciśnięcia klawisza w python?
- 2. Wykrywanie naciśnięcia klawisza w Google Maps
- 3. Odpytywanie klawiatury (wykrywanie naciśnięcia klawisza) w pythonie
- 4. Symulowanie naciśnięcia klawisza za pomocą Swift
- 5. Zdarzenie zatrzymania naciśnięcia klawisza
- 6. Wykrywanie fizycznego naciśnięcia klawisza menu w systemie Android
- 7. Określa długość naciśnięcia klawisza w pytonie
- 8. VB Symulowanie naciśnięcia klawisza
- 9. AutoHotKey przerwanie naciśnięcia klawisza
- 10. Przechwytywanie naciśnięcia klawisza w tle
- 11. nie można zwolnić zdarzenia naciśnięcia klawisza po naciśnięciu przycisku usuwania
- 12. Symulowanie naciśnięcia klawisza przy użyciu JavaScriptu
- 13. Symulacja naciśnięcia klawisza w Pythonie 2.7
- 14. Metoda Pythona do czytania naciśnięcia klawisza?
- 15. Używanie KBDLLHOOKSTRUCT do określenia pierwszego naciśnięcia klawisza
- 16. Symulowanie naciśnięcia klawisza za pomocą bash
- 17. "Posłuchaj" naciśnięcia klawisza, gdy wątek śpi
- 18. Przechwytywanie zdarzenia naciśnięcia klawisza w mojej aplikacji WPF, które nie mają ostrości
- 19. Nie można symulować zdarzenia naciśnięcia klawisza w teście Angular 2 (Jasmine)
- 20. Jak wyłączyć wyświetlanie naciśnięcia klawisza w konsoli w .NET?
- 21. Symulowanie zdarzenia naciśnięcia klawisza przy użyciu języka Python dla systemu Linux
- 22. Wyłączanie naciśnięcia klawisza JQuery w polach wejściowych lub tekstowych
- 23. Prevent „niedozwolone” beep po naciśnięcia klawisza w NSView
- 24. Jak słuchać naciśnięcia klawisza Ctrl-P w JavaScript?
- 25. Jak słuchać naciśnięcia klawisza powtarzalnie w Dart dla gier?
- 26. Symulacja naciśnięcia klawisza w aplikacji konsoli Linux C
- 27. Symulowanie zdarzenia klawisza TAB w Selenium RC
- 28. Jak nadpisać zachowanie naciśnięcia klawisza ESC dla okna dialogowego jQuery
- 29. Dlaczego readlinka gnu wymaga ode mnie dwukrotnego naciśnięcia klawisza C?
- 30. Wykrywanie po naciśnięciu niestandardowego klawisza UIButton
Co próbowałeś sam? –
To nie jest duplikat. Odpowiedzi celu C nie są duplikatami dla pytań Swift. –
W jakim kontekście chciałeś wykryć naciśnięcie klawisza? W oknie? Wejście? –