UIKeyCommandで市販の外付けバーコードリーダーからの入力を受けとる(Swift版)
Bluetoothで接続し、EAN-13やCode128等の一次元バーコードを読み取ることができるバーコードリーダーが市販されているが、それをiOSで扱う方法の一つにUIKeyCommand
があります。
UIKeyCommand
の存在は岸川さんのブログで知ったのだけど、Objective-Cの頃に書かれたものでSwiftで書き直してみたコードを残しておく。
$ xcrun swift -version Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1) Target: x86_64-apple-macosx10.9
class ViewController: UIViewController { override var canBecomeFirstResponder: Bool { return true } override var keyCommands: [UIKeyCommand]? { return barcodeReaderEnabled ? self._keyCommands : nil } var barcodeReaderEnabled = true private var currentCodes: [String] = [] private var _keyCommands: [UIKeyCommand] = { let characters = CharacterSet( charactersIn: (UnicodeScalar(0x20)...UnicodeScalar(0x7f)) ).union(CharacterSet.newlines) let chars = (0x00...0x7f) .map { UnicodeScalar($0) } .filter { characters.contains($0) } return chars.map { UIKeyCommand( input: String($0), modifierFlags: [], action: #selector(handleKeyCommand) ) } }() func handleKeyCommand(sender: UIKeyCommand) { if sender.input.rangeOfCharacter(from: CharacterSet.newlines)?.isEmpty == false { debugPrint(currentCodes.joined()) currentCodes = [] } else { currentCodes.append(sender.input) } } }
ブログ用に改行を多めにしてあります。