Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What is going on with this article?
@ensan_hcl

UITextDocumentProxyのsetMarkedTextを(まだ)使ってはいけない

更新

iOSカスタムキーボードのsetMarkedTextの現状」でiOS14.4現在の状況について書いています。

概要

iOSのKeyboard Extensionを自作するとき、必ず触ることになるのがUITextDocumentProxyです。

iOS13からはsetMarkedText(_:selectedRange)というメソッドが追加され、これを使うことで標準の日本語キーボードのような「入力中のテキストの背景の色が変わる」挙動が実現できるように思われます。

実際、4月に複数のキーボードで調べたところでは2つのKeyboard Extension(flickFlick SKK)がsetMarkedText()を用いていると思われる挙動を示していました。

2020年8月17日追記

flickはデフォルトでこの機能を無効にしたと思われます。以前の挙動は設定から「インライン入力を可能な限り使う」をオンにすることで再現します。

挙動の詳細

チェックした環境はiOS 13.5.1のiPhoneSE(第1世代・第2世代)です。

ezgif-6-0ef87aa0999a.gif

少し何が起きているかわかりにくいですが、消える瞬間にテキストをタップしています。標準キーボードを利用してきたユーザが期待する動作はカーソルの移動ですが、(何故か)入力中のテキストが全く見えなくなる挙動を示します。
これはFlick SKKについても同一です。そもそもsetMarkedText(_:selectedRange)がこの挙動を示すので、当然といえば当然です。

まだ使うべきではない

入力中のテキストの背景の色が変わるのは標準キーボードで当然の動作ですし、できれば実装したほうがユーザフレンドリーな動作です。が、それによってできることが著しく制限されます。実際に制限されるのは

  • 入力中の(キーボードを介さない)カーソル移動
    • 入力中の(キーボードを介さない)変換範囲の指定
    • 入力中の(キーボードを介さない)誤字の修正
  • 入力中の範囲外タップによる入力終了
    • flickでは範囲外タップで入力中の文章が消滅する(仕様?)

などなどです。当然バグの温床でもあります。
さらに、この挙動を修正する方法は今のところありません。散々格闘しましたが、標準のキーボードはおそらくsetMarkedTextを使っていないんじゃないかと思います。もし詳しいことをご存知の方いらっしゃいましたら教えてください。
ただ、いろいろなKeyboard Extensionのレビューを見て見ると「入力中の文字の色が変わるようにしてくれ」という要望はかなり多いです。iOS12までは「appleに言ってくれ」が答えでしたが、iOS13では「appleに文句言ってくれ」と答えたいところでしょう。なんでappleはわざわざこんな使えないものを追加したんだ……。

参考

4
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ensan_hcl
Swiftユーザ。iOS向けキーボードアプリ「azooKey」を開発・公開しています。自然言語処理に興味あり。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
4
Help us understand the problem. What is going on with this article?