こんにちは。
はじめましてnukkyです!
よくある挙動ですが、リンクが含まれる文字列を表示する際に
リンクのタップでブラウザを開きたいとなることがあると思います。
そこで、今回はTTTAttributedLabelを使用し、
文字列からリンクの表示、リンクタップ制御を行います。
リッチなテキストを表示するためのUILabelの機能を拡張するOSSです。
その機能の一つに文字列からリンクを検出してくれる機能があるので
今回は主にその部分の実装についてになります。
https://github.com/TTTAttributedLabel/TTTAttributedLabel#tttattributedlabel
インストールにはCocoaPodsを使用します。
pod 'TTTAttributedLabel'
それと、TTTAttributedLabelはObjective-Cで書かれているので
Bridging-Header.hにimportしてください。
#import <TTTAttributedLabel/TTTAttributedLabel.h>
まずはTTTAttributedLabelをimportします。
import TTTAttributedLabel
StoryboardにUILabelを用意し
ClassにTTTAttributedLabelを指定してください。
それをIBOutlet接続します。
@IBOutlet weak var linkLabel: TTTAttributedLabel!
テキストのリンクをタップできるように設定します。
linkLabel.enabledTextCheckingTypes = NSTextCheckingResult.CheckingType.link.rawValue
リンクを含むテキストをセットします。
linkLabel.text = "URLにタップできます。\nhttps://www.google.co.jp/"
そうするとこのような表示になります。
このままだとタップが検知できないので
TTTAttributedLabelDelegateを設定します。
class ViewController: UIViewController, TTTAttributedLabelDelegate {
LabelのDelegateを設定します。
linkLabel.delegate = self
テキスト内のリンクがタップされた場合、以下のメソッドが呼ばれます。
func attributedLabel(_ label: TTTAttributedLabel!, didSelectLinkWith url: URL!) { //処理 }
これで、文字列からリンクを表示、リンクタップ制御ができたと思います。
UITextViewをつかえば標準でリンクの検知ができますが、
標準の外部ブラウザ起動しかできないので、
TTTAttributedLabelをつかえば、何か処理を挟んだり、
内部のWebViewを起動したりと色々できるので
リンク検知でゴニョゴニョしたいときは便利だと思います!