投稿日:

【Swift】Smart keyboardで(絵文字キーボードのように)カスタムキーボードを表示させる

swift objective c xcode smart keyboard ios custom keyboard emoji keyboard show hide not カスタムキーボード 絵文字キーボード 表示 されない





外付けキーボードも視野に入れたカスタムキーボードを作っている身として、Smart Keyboardにソフトウェアキーボード表示キーが存在しない仕様にはかなり困惑しました。

というのも僕のカスタムキーボードは外付けキーボードを接続したときに自動で画面外へ隠れる仕様にしていたためです(システムキーボードと同じ)。

これはキーボードのprimaryLanguageを”複数言語(mul)”に設定することで実現できるんですが、
こうすることで、どんな入力言語を追加していても外付けの「ソフトウェアキーボード表示キー」で柔軟にカスタムキーボードの表示・非表示ができるようになります。

しかしこの仕様のままSmart Keyboardを接続されてしまうと、さあ大変です。
カスタムキーボードは自動で隠れ、再表示させる手段はありません(接続を解除しないといけない)。

しかしその解決策がなんとか見つかったのでご紹介します。




style="display:inline-block;width:336px;height:280px"
data-ad-client="ca-pub-3481943934845626"
data-ad-slot="8806407289">







絵文字キーボードの仕様



swift objective c xcode smart keyboard ios custom keyboard emoji keyboard show hide not カスタムキーボード 絵文字キーボード 表示 されない


システムの絵文字キーボードはSmart Keyboardだろうがなんだろうが、無条件で表示されますよね。

iOSカスタムキーボードのことはそれなりに調べ尽くしたと思い込んでいた当時の僕にとって、その仕様をカスタムキーボードで再現する方法は存在せず、絵文字キーボード独自のものだと判断してしまいました。

つまり、Smart Keyboard接続中にカスタムキーボードを表示させることは不可能だと半ば諦め状態です。


PrimaryLanguageで対応可能



しかしこの海外の記事にその解決策が(こっそりと)書かれていました。

“Use the right language tag”項目の最後です。

“and a keyboard for non-linguistic items (such as emoji) zxx.”


要するに「絵文字キーボードのような非言語にはzxxをprimaryLanguageに設定すべき」とのこと。

これがSmart Keyboardへの対策でした。


設定方法



キーボードターゲットのinfo.plistファイル(またはTARGETS→Keyboard Target→Info)の
NSExtension → NSExtensionAttributes → PrimaryLanguageの文字列に”zxx”をセットするだけです。

実行し、キーボード設定のリストを確認してみると、カスタムキーボードに「言語的内容なし」と表記されるようになります。

swift objective c xcode smart keyboard ios custom keyboard emoji keyboard show hide not カスタムキーボード 絵文字キーボード 表示 されない


これでシステムの絵文字キーボードと同様の挙動をするようになります。



リリース版で対応したこと



もちろんユーザーが使う外付けキーボードはSmart KeyboardもあればBluetoothキーボードもあるので、両者に対応する必要があります。

しかしプログラム的にPrimaryLanguageを切り替える方法が僕にはよくわかりませんでした。
inputViewController.primaryLanguageは値を代入できるはずですが、挙動をコントロールできませんでした。

そこでとった方法はキーボードターゲットを2つに分けることです。

こちらの記事を参考に1つのキーボードファイルを2つのターゲットで共有するように実装しました。
が、実際はエラーに苛まれ、うまく動作するまでにプロジェクト設定をあちこちいじり回りました。



ビルドが上手くいけば、カスタムキーボードを追加する際、追加するキーボードの選択画面が出現します。

swift objective c xcode smart keyboard ios custom keyboard emoji keyboard show hide not カスタムキーボード 絵文字キーボード 表示 されない


これでユーザーが自分のキーボードに合わせて適宜選べるようになりました。


カスタムキーボードを作る際は、PrimaryLanguageの”mul”と”zxx”の2つは覚えておいたほうが良さそうです。
この言語タグのリストは下記のリンクで掲載されています。

言語下位タグレジストリ




Sponsored Link



Comment