📚

テキストを書き換えた時にUITextViewのURLリンクがおかしくなる時の対処

2022/04/18に公開

現象

UITextViewで以下プロパティ
・editable = false
・dataDetectorTypesをUIDataDetectorTypeLinkに設定
 (Storyboard上だとLinksにチェック)
を設定した場合、設定するテキストにURLが含まれる場合リンクを勝手に貼ってくれる。

しかし、UITextViewのテキストを書き換えた時に、URLが含まれていないのにも関わらず場合リンクになってしまったり、書き換える前のURLへリンクしてしまったりする。

以下記事によると、iOS7ベータから存在し未だに修正されていない既知のバグのようだ。
http://manabuueno.tumblr.com/post/64781595021/ios-7-uitextview

対処

[tv setText:string];
[tv setFont:tv.font]; // これ

ただ、テキストを設定した後にフォントを上書きするだけ。

tv.font = tv.font;

これでもOK。
根本の原因は不明なまま。
直る理由を想像すると、URLのリンク情報をfontが持っておりfontの設定と同時に最新のtextで更新される形になるからか?
リンクがおかしいのを修正するために、インスタンスを作りなおすのもばからしい。

swiftでは試していないがおそらくでも同様なのではなかろうか?
ネット上に解決法が見当たらなかったので投稿。
こんな些細なところに時間をかけたくはないのでこれ以上は調べない。

Discussion