スポンサーサイト

2018.03.30 Friday

0

    一定期間更新がないため広告を表示しています

    Xcode:Swift3での外部キー入力処理について

    2017.02.23 Thursday

    0

      Swift3において、「UIKeyCommand」を用いた処理の最低限のコードを残しておきます。

      当初,KeyboardExtensionにおいて,キー入力を取得したかったのですが,仕様上無理なようです。

       

       

      import UIKit

       

      class ViewController: UIViewController {

       

       private enum InputKey: String {

       case Key_Q = "Q"

       case Key_W = "W"

       case KEY_E = "E"

          }

       

       override func viewDidLoad() {

       super.viewDidLoad()

       // Do any additional setup after loading the view, typically from a nib.

          }

       

       override func didReceiveMemoryWarning() {

       super.didReceiveMemoryWarning()

       // Dispose of any resources that can be recreated.

          }

       

       override var keyCommands: [UIKeyCommand]? {

       return [

                  UIKeyCommand(input: InputKey.Key_W.rawValue,

                               modifierFlags: .init(rawValue: 0),

                               action: #selector(self.performCommand(sender:))),

       

                  UIKeyCommand(input: InputKey.Key_Q.rawValue,

                               modifierFlags: .init(rawValue: 0),

                               action: #selector(self.performCommand(sender:))),

       

                  UIKeyCommand(input: InputKey.KEY_E.rawValue,

                               modifierFlags: .init(rawValue: 0),

                               action: #selector(self.performCommand(sender:)))

              ]

          }

       

       func performCommand(sender: UIKeyCommand) {

       guard let key = InputKey(rawValue: sender.input) else {

       return

              }

       switch key {

       case .Key_Q:

                  print ("Q")

           return

       case .Key_W:

                  print ("W")

           return

       case .KEY_E:

                  print ("E")

           return

              }

          }

      }

       

       

       

      キーボードで"Q"、"W"、"E" をPressした時に、XcodeのDebugエリアにそれぞれの入力文字が吐き出されます。

      シフトなどと同時打鍵(ショートカットに対応する)の場合
      modifierFlags: .init(rawValue: 0)
      この値を下記のものにすることで、対応できます。

      // AlphaShift Caps Lock key (⇪):65536 .alphaShift
      // Alternate Option key (⌥):524288 .alternate
      // Command Command key (⌘):1048576 .command
      // Shift Shift key (⇧):131072 .shift
      // Control Control key (⌃):262144 .control



      case Key_Q = "Q"

      この引数は、エスケープシーケンス(例:"¥t")に対応しています。

      また、特殊キーの指定は下記のものを使います。

      • UIKeyInputUpArrow - Up arrow key 
      • UIKeyInputDownArrow - Down arrow key 
      • UIKeyInputLeftArrow - Left arrow key 
      • UIKeyInputEscape - Escape key


      ※キーボードエクステンション(サードパーティーキーボード)にて、Bluetoothキーボードを使用したかったのだが、これは使用不可能という結論に至りました。

       

      http://ja.stackoverflow.com/questions/30926/keyboard-extensionで-物理キーボードの入力を取得して加工-挿入したいのですが-どうしたらいいのでしょうか


      Apple API Reference : UIKeyCommand