2015-08-17 3 views
3

У меня проблема с перехватом событий клавиатуры. Я подключил свой iOS к SteelSeries Free (контроллер геймпада), который при подключении к iOS будет обнаружен как Bluetooth-клавиатура. Это проверяется, когда я открываю Notes, любые нажатия кнопок на геймпаде будут писать письмо.iOS Swift Interrupt Keyboard Events

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

Я пытался использовать GCController, но, видимо, он не был обнаружен как объект Game Controller. Когда я печатаю счет, он отображается как 0. Мой код ниже.

let gameControllers = GCController.controllers() as! [GCController] 
println("configureConnectedGameControllers count: \(gameControllers.count)") 

Поэтому я предположил, что это потому, что геймпад обнаружен как клавиатура Bluetooth, поэтому его не обнаружено как игровой контроллер. И поэтому я попытался использовать UIKeyCommand. Ниже мой код:

override func viewDidLoad() { 
    super.viewDidLoad() 

    var keys = [UIKeyCommand]() 
    for digit in "abcdefghijklmnopqrstuvwxyz" 
    { 
     keys.append(UIKeyCommand(input: String(digit), modifierFlags: .Command, action: Selector("keyPressed:"))) 
     keys.append(UIKeyCommand(input: String(digit), modifierFlags: .Control, action: Selector("keyPressed:"))) 
     keys.append(UIKeyCommand(input: String(digit), modifierFlags: nil, action: "pressKey")) 
    } 
} 

override func canBecomeFirstResponder() -> Bool { 
    return true 
} 

func keyPressed(command: UIKeyCommand) { 
    println("another key is pressed") //never gets called 
} 

func pressKey() { 
    println("a key is pressed") 
} 

Но даже при такой реализации, ничего не печатается в консоли, когда я нажимаю кнопку на геймпаде.

Это меня смущает. Поэтому, пожалуйста, помогите мне, если вы знаете какой-либо ответ на этот вопрос. Заранее спасибо!

+0

Вы должны вернуть 'UIKeyCommand' экземпляры из UIResponder подкласса - Вы могли бы, например, подкласс' UIView' и сделать экземпляр, что ваш вид корня для этого вида контроллера – Paulw11

+0

К сожалению, я действительно не получить IOS/Swift, как я только что узнал несколько дней назад. Можете ли вы объяснить это больше или, если возможно, предоставить образец? @ Paulw11 – CodingBird

+0

Мне, наконец, удалось заставить его работать! Спасибо за подсказку @ Paulw11 – CodingBird

ответ

4

Мне, наконец, удалось заставить его работать. Ниже приведен код, если он когда-либо понадобится.

var keys = [UIKeyCommand]() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    //configureGameControllers() 

    for digit in "abcdefghijklmnopqrstuvwxyz" 
    { 
     keys.append(UIKeyCommand(input: String(digit), modifierFlags: nil, action: Selector("keyPressed:"))) 
    } 
} 

override func canBecomeFirstResponder() -> Bool { 
    return true 
} 

override var keyCommands: [AnyObject]? { 
    get { 
     return keys 
    } 
} 


func keyPressed(command: UIKeyCommand) { 
    println("user pressed \(command.input)") 
} 
+0

Здравствуйте, почему вам нужно было переопределить переменные keyCommands? – mm24