Apple Watchで文字入力

これはWatchKit Advent Calendar 2014の24日目の記事です。

少しずつですが、Apple Watchでの文字入力がやっと試せるようになってきました。

text input controller

Apple Watchは画面が小さいので、iPhoneのようなソフトウェアキーボード画面はありません。 その代わりに、「text input controller」とよばれる、少し違ったタイプの文字入力の専用画面を表示します。

「text input controller」は、WKInterfaceControllerのpresentTextInputControllerWithSuggestionsメソッドで表示することができます。 現在のWKInterfaceControllerの上に、Modalアニメーションで「text input controller」が表示されます。

「text input controller」は、ソフトウェアキーボードのように表示する文字がきまっているわけではなく、あらかじめ選択できる文字列を設定してから表示します。

例えば下の例では、「おはよう」と「こんにちは」と「こんばんは」の三つの選択肢を持った「text input controller」が表示され、ユーザーはそのなかから選択肢を選ぶことができます。 どれか一つの選択肢を選んだ時点で、「text input controller」はdismissされ、completion handlerがよばれます。

選んだ選択肢は completion handlerのなかでNSArrayとして取得できます。 このNSArrayの第一要素が選択された文章のNSStringとなっています。

NSArray* initialPhrases = @[
@"おはよう", 
@"こんにちは", 
@"こんばんは"];

[self presentTextInputControllerWithSuggestions:initialPhrases
     allowedInputMode:WKTextInputModeAllowAnimatedEmoji
     completion:^(NSArray *results) {
        if (results && results.count > 0) {
            id aResult = [results objectAtIndex:0];
            // aResultが選択されたNSString
        }
        else {
           // 文字が選択されていません。
        }
    }];

表示される「text input controller」はこんな画面になっていて、与えられた文字列がボタンとしてならんでいます。 (文字列の数が多い場合には、スクロールが可能です) text_input_phrases_2x

InputMode

「text input controller」では、inputMode属性を指定する必要があり、下記の3つの値を選ぶことができます。

  • WKTextInputModePlain
  • WKTextInputModeAllowEmoji
  • WKTextInputModeAllowAnimatedEmoji

WKTextInputModePlainでは、dictationボタンだけが表示されます。 WKTextInputModeAllowEmojiでは、dictationボタンと絵文字ボタンが表示されます。 WKTextInputModeAllowAnimatedEmojiでは、dictationボタンと動く絵文字ボタンが表示されます。

現時点では、WKTextInputModeAllowEmojiを設定した時とWKTextInputModeAllowAnimatedEmojiを設定した時では同じ見た目になっているようです。(上の画面キャプチャーと同じです)

dictationボタンを押すと音声認識でテキスト認識をしてくれると思われます。 ただ、現時点ではこれらの機能が Apple Watch Simulatorでサポートされていないため、詳細な動きについては不明です。

さすがにdictationは実機がでないと動かなさそうですが、「text input controller」についてはある程度動くようになってきて、やっと文字入力ができるアプリも作れる状況になってきました。

冬休みにWatchKitのアプリを作りはじめてみても楽しそうです。