NSAttributedString из HTML с гиперссылками - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь визуализировать большую строку HTML, содержащую гиперссылки, в UITextView, используя NSAttributedString. Все работает нормально, кроме гиперссылок, они на самом деле не открывают ссылку.

Например, вот примерная версия моей HTML-строки:

let htmlString = "<html><p>If you would like to contact someone, you can email 
them at <a class=rvts10 href=\"mailto:some@one.com\">some@one.com</a></p></html>"

У меня есть функция с именем convertHTML(), которая преобразует строки в NSAttributedString с опциями типа документа html, которые я использую для присвоения атрибутному тексту UITextView:

textView.attributedText = htmlString.convertHTML()

TextField selectable, но не editable. Когда страница загружена, вы можете видеть стиль гиперссылки (синий текст) и все остальное, но вы не можете нажать на ссылку и открыть почтовое приложение.

Я предполагаю, что мне нужно изменить «mailto: ...» на что-то еще, что распознает iOS, но я просто не знаю, что нужно сделать, чтобы эта ссылка была доступной.


Это мой метод HTML:

func convertHtml() -> NSAttributedString{
    guard let data = data(using: .utf8) else { return NSAttributedString() }
    do{
        return try NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)
    }catch{
        return NSAttributedString()
    }
}

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Я использую это расширение:

import Foundation

    extension NSAttributedString {

        convenience init(htmlString html: String) throws {
            try self.init(data: Data(html.utf8), options: [
                .documentType: NSAttributedString.DocumentType.html,
                .characterEncoding: String.Encoding.utf8.rawValue
                ], documentAttributes: nil)
        }

    }

После внедрения вы можете использовать его так:

contentTextField.attributedText = try? NSAttributedString(htmlString: aHTMLString)
0 голосов
/ 03 мая 2018

Я думаю, что у вас есть ошибка с вашим методом convertHTML (), проверьте это

 let htmlString = "<html><p>If you would like to contact someone, you can email them at <a class=rvts10 href=\"mailto:some@one.com\">some@one.com</a></p></html>"

            // you have to convert string to data
            let data = Data(htmlString.utf8)
            // then convert data to NSAttributedString with NSAttributedString.DocumentType.htm
            if let attributedString = try? NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil) {
                self.textView.attributedText = attributedString
            }
...