目次Category
こんにちは、22新卒の大石です。
今回は、実務で実装した際に調査したことについて紹介します。
新卒1年目からスマホアプリの実装のタスクを任せられ、とても楽しく働いています!!
UITextViewに含まれるURLをリンク化する
本来、UITextViewに含まれるURLをリンク化するのはとても簡単です。
以下の画像の通り、BehaviorのSelectableをチェック、DataDetectorのLinkをチェックします。
この設定だけで、含まれるURLは自動で検知されリンク化されるのですが、
この方法には大きな欠点があります。
それは、メールアドレスもリンク化されてしまうのです。
さらに、リンク化されたメールアドレスをタップするとアプリがクラッシュします。
厳密にURLのみをリンク化したい場合、自前でリンク化のロジックを用意する必要があります。
本記事は、その方法の紹介になります。
URLのリンク化
完成形
実装
今回の実装部分全体です。
コメントの番号順に進めます。
1.TextViewに表示するテキストに含まれるURLを抽出
Swiftに用意されているNSDataDetectorを利用してURLを抽出します。
http、httpsスキームのみを抽出するかたちで実装しました。
2.TextViewに表示するテキストのNSAttributedStringインスタンスを作成
NSAttributedStringはリンク化以外にも、一部の文字の大きさや色を指定でき、
細かい文字の装飾に利用できます。
TextViewで表示するテキストを引数にインスタンスを作成します。
3.テキスト内のURLをNSRangeで指定してリンク化
テキスト内での出現位置と長さを表す構造体のNSRangeを抽出したURL分作成し、
NSAttributedStringインスタンスにリンク化部分として追加します。
4.TextView.attributedTextに代入
TextViewのattributedTextプロパティにNSAttributedStringインスタンスを代入します。
この時、コードの最下段でリンク化部分の文字色も指定しました。
この実装方法で、TextViewに含まれるURLをリンク化できたと思います。
まとめ
今回は、実際に実務で行なった実装についての記事を書きました。
要件に合致する最適な実装方法を調べるうちに、Swiftの便利なクラスについての知識が深まり、
とても成長を感じることができました。
これからも精進していきます。