2016-04-28 4 views
0

Я пытаюсь определить, нажата ли клавиша U или нет, и если это так, то должно быть print("BUT...BUT..");, но я не уверен, как проверить разные ключи, так как документация нажатия клавиш очень плохо .. я нашел ответ с кодами клавиш, но они работают только для QWERTY клавиатурыПроверьте, нажата ли клавиша u Swift Cocoa

viewcontroller.swift

override func viewDidLoad(){ 
    super.viewDidLoad(); 
    let f = Foo(); 
    f.doSonethimg(); 
} 

override func keyDown(theEvent: NSEvent){ 
    let f = Foo(); 
    f.KeyDown(theEvent); 
} 

Foo.swift

public func doSonething(){ 
    print("Hello from Dylib"); 
} 

public func keyDown(event: NSEvent){ 
     if let keyString = theEvent.charactersIgnoringModifiers where keyString == "u" || keyString == "U" { 
    Swift.print("BUT...BUT…") 
} 
} 

Как я могу изменить функцию keyDown для ответа на U и что это за ключ по умолчанию?

Я смотрел - Detecting key press event in Swift и https://superuser.com/questions/399430/mouse-button-and-keypress-counter-for-mac-os-x

также см - https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/EventOverview/HandlingKeyEvents/HandlingKeyEvents.html - Переопределение KeyDown: Метод

+1

Считайте, что поведение функциональных клавиш (в виде F-клавиш) зависит от настроек в Системных настройках – vadian

+0

, это правда, спасибо, я обновлю свой вопрос соответственно – Gerwin

+1

Вы прочитали документацию NSEvent? NSEvent имеет методы получения информации о ключевых событиях, например 'characters'. События Keydown не имеют ключа по умолчанию. – Willeke

ответ

4

Вы можете легко проверить для персонажа с помощью NSEvent сек charactersIgnoringModifiers собственности.

func keyDown(theEvent: NSEvent) { 
    if let keyString = theEvent.charactersIgnoringModifiers where keyString == "u" || keyString == "U" { 
     Swift.print("BUT...BUT…") 
    } 
} 

Примечание: существует разница между проверкой на 'u' и 'U'. Они изменены Shift. Поэтому, если вы хотите, чтобы оба были распознаны, проверьте оба. (как в приведенном выше примере)

Ответчик цепи:
Функция KeyDown только вызывается, когда вид или ViewController участвует в так называемом Responder Chain.

Чтобы настроить свой элемент управления представлением для того, чтобы быть частью Цепочки ответчиков, прочитайте следующее: documentation.

+0

Событие keyDown в моем диспетчере просмотра никогда не вызывается, поэтому он не войдет, если вы знаете, почему это так? – Gerwin

+0

Я обновил свой ответ – mangerlahn

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