これまで、3つの記事を通じてメンション入力と表示の実装にチャレンジしてきたが、実はひとつ、落とし穴があった。
実はフィールドに入力した文字列をコピーする際に、NSTextAttachment
を文字列として解釈することができない。つまり、こような状態でコピーをすると、
ペーストした結果は、メンション表示が落ちて次のようになるのだ。
これは言われてみれば当然だが、この壁にぶち当たるまで気がつかなかった。そして、ひとつ目の記事で言及した以下を、図らずも伏線として回収する結果となった笑
(メンション表示を)カーソル操作上1文字扱いをする例は代表的なアプリには見当たらず。
メンション表示にNSTextAttachment
を用いることで、フィールド上の文字列処理や操作仕様が平易になる一方で、代表的なメッセージングアプリが軒並み愚直に文字列のみを用いる理由のひとつは、恐らくこれだと思われる。
そもそも、コピー時に選択されたテキストの一部を変更してクリップボードに詰められない仕様は、もしそれが可能だとした場合を想像すると理解できる。たとえば、あるアプリ上でURLを文字列選択、コピーする際に、当人の預かり知らぬうちに別のURLに改竄されてクリップボードに積まれたとしたら… こうした悪用が可能となる。
という話を同僚にしたところ、数ヶ月前にTwitterが公開したOSSという選択肢を提示されて、その存在を思い出した。