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