23
17

More than 5 years have passed since last update.

【Swift】UITextViewにHTMLを表示する方法

Posted at

UITextViewにHTMLを表示してみた

UITextViewにHTMLを表示したかったので、試してみました。

こちらの記事UITextViewにHTMLを表示する(Swift3版)を参考にして、HTMLをNSAttributedStringに変換するextensionを定義しました。

    import Foundation
    import UIKit

    extension NSAttributedString {

        static func parseHTML2Text(sourceText text: String) -> NSAttributedString? {
            let encodeData = text.data(using: String.Encoding.utf8, allowLossyConversion: true)
            let attributedOptions = [
                NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType as AnyObject,
                NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue as AnyObject
            ]

            var attributedString: NSAttributedString?
            if let encodeData = encodeData {
                do {
                    attributedString = try NSAttributedString(
                        data: encodeData,
                        options: attributedOptions,
                        documentAttributes: nil
                    )
                } catch _ {

                }
            }

            return attributedString
        }

    }

あとは、こちら↓のようにHTMLを変換して、UITextFieldのattributedTextに代入すればオッケーです。

    let htmlText = "<p>UITextFieldにHTMLを表示することができます。<font color=#ff0000>フォントの色</font>も変更できますし、<a href=\"https://www.apple.com/jp/\">リンク</a>も埋め込むことができます。</p>"
    let attributedString = NSAttributedString.parseHTML2Text(sourceText: htmlText)
    htmlTextView.attributedText = attributedString

文字列のなかに " ダブルコーテーションがあるとエラーになります。リンクなどでダブルコーテーションをつかうときは、 \ バックスラッシュをダブルコーテーションのまえにつけてください。

実行すると、こちらのようにHTMLのタグを解釈して表示されています。

スクリーンショット 2018-07-24 14.37.47.png

リンクをタップしたいとき

スクリーンショット 2018-07-24 11.53.23.png

リンクをタップしたいときは、 BehaviorSelectableData DetectorsLink を有効にします。
HTMLのなかにリンクが埋め込まれている場合は、タップするとSafariに遷移してリンクを開いてくれるようになります。

23
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
17