2015-08-17 24 views
3

我有問題來攔截鍵盤事件。我已將我的iOS與SteelSeries Free(遊戲手柄控制器)連接起來,當連接到iOS時,它將被檢測爲藍牙鍵盤。當我打開Notes時會進行測試,遊戲手柄中的任何按鈕都會寫入一個字母。iOS Swift中斷鍵盤事件

我需要攔截這個按鈕按下並運行我自己的功能,但不幸的是我無法這樣做。

我一直在嘗試使用GCController,但顯然它沒有被檢測爲遊戲控制器對象。當我打印計數時,它顯示爲0.我的代碼如下。

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

所以我認爲這是因爲手柄被檢測爲藍牙鍵盤,這就是爲什麼它不是爲遊戲控制器檢測到。所以我試圖改用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 /斯威夫特,就像我剛剛學到的那樣。你能解釋一下嗎?或者如果可能的話提供一個樣本? @ 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

你好,爲什麼你需要重寫var keyCommands? – mm24