2014-12-06 3 views
3

내 응용 프로그램에 하드웨어 키보드 지원을 추가하여 사용자가 언제든지 키보드의 특정 키를 눌러 함수를 호출 할 수 있도록하고 싶습니다. this article을 발견하고 Objective-C에서 훌륭하게 작동하도록 만들 수있었습니다. 스위프트로 변환했는데 어떤 이유로 "c"를 누른 후에 keyPressed 메서드가 호출되지 않습니다. 사용자가 키보드의 아무 키나 누르 자마자 keyCommands이 호출됨을 확인했습니다. iOS 시뮬레이터와 Mac의 키보드로 테스트하고 있습니다.Swift에서 하드웨어 키보드 키 누르기 듣기

여기 내 Swift 코드의 문제점은 무엇입니까?

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

func keyCommands() -> [AnyObject]? { 
    var keyCommands = [] 

    struct Static { 
     static var onceToken : dispatch_once_t = 0 
    } 
    dispatch_once(&Static.onceToken) { 
     let command = UIKeyCommand(input: "c", modifierFlags: nil, action: "keyPressed:") 
     keyCommands = [command] 
    } 

    return keyCommands 
} 

func keyPressed(command: UIKeyCommand) { 
    println("user pressed c") //never gets called 
} 

답변

2

문제는 keyCommands 키를 누를 때마다이 비어 있도록 내가 배열을 초기화 할 때마다 호출된다, 나는 그것을 돌려줍니다. 따라서 메서드를 처음 호출하면 올바른 배열이 반환되지만 두 번째로 내용이없는 배열이 반환됩니다.

문제를 해결하려면 키 명령 배열을 속성으로 저장 한 다음 nil인지 확인한 다음 그럴 경우 작성했습니다. 그렇지 않으면 방금 저장된 속성을 반환합니다.

관련 문제