Изменить цвета ссылок и подчеркнуть цвет HTML, преобразованного в AttributedString - PullRequest
1 голос
/ 20 марта 2019

Я хотел бы раскрасить ссылки и придать особый цвет подчеркиванию ссылок в моем тексте, полученных из html.

Это то, что у меня есть на данный момент:

...

public func htmlStyleAttributeText(text: String) -> NSMutableAttributedString? {

        if let htmlData = text.data(using: .utf8) {

            let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html, NSAttributedString.DocumentReadingOptionKey.characterEncoding: String.Encoding.utf8.rawValue]

            let attributedString = try? NSMutableAttributedString(data: htmlData, options: options, documentAttributes: nil)

            let attributes: [NSAttributedString.Key: AnyObject] = [NSAttributedString.Key.foregroundColor: UIColor.red]
            attributedString?.addAttributes(attributes, range: NSRange.init(location: 0, length: attributedString?.length ?? 0))
            return attributedString
        }

        return nil
    }
....

Вот что я получаю: enter image description here

Мне нужен обычный цвет текста, красный для ссылок и зеленый для подчеркивания ссылок

Ответы [ 2 ]

3 голосов
/ 20 марта 2019

Цвет текста красный, потому что вы установили его на красный для всей приписанной строки:

let attributes: [NSAttributedString.Key: AnyObject] = 
                  [NSAttributedString.Key.foregroundColor: UIColor.red]
attributedString?.addAttributes(attributes, 
                  range: NSRange.init(location: 0, length: attributedString?.length ?? 0))

Если вы хотите, чтобы он имел "обычный" (= я думаю, черный?) Цвет, просто не делайте этого и удалите эти строки.

А вот как установить цвет для ссылок в вашей приписанной строке:
Изменить цвет ссылки в NSMutableAttributedString

Это ключ, который необходимо использовать для установки другого цвета подчеркивания:
NSAttributedString.Key. underlineColor


Edit:

Чтобы сделать это более явным и соединить кусочки - это то, что вам нужно сделать, чтобы получить нужные цвета ссылок:

textView.linkTextAttributes = [
    .foregroundColor: UIColor.black,
    .underlineColor: UIColor.red
]

(В дополнение к удалению до двух строк кода, как указано выше.)

0 голосов
/ 20 марта 2019

Если вы используете UITextView, будет достаточно установить tintColor на UIColor.red и удалить следующее:

let attributes: [NSAttributedString.Key: AnyObject] = [NSAttributedString.Key.foregroundColor: UIColor.red]
attributedString?.addAttributes(attributes, range: NSRange.init(location: 0, length: attributedString?.length ?? 0))

так бы это выглядело так:

public func htmlStyleAttributeText(text: String) -> NSMutableAttributedString? {
    if let htmlData = text.data(using: .utf8) {
        let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html, NSAttributedString.DocumentReadingOptionKey.characterEncoding: String.Encoding.utf8.rawValue]
        let attributedString = try? NSMutableAttributedString(data: htmlData, options: options, documentAttributes: nil)
        return attributedString
    }
    return nil
}

//
textView.tintColor = .red
textView.attributedText = htmlStyleAttributeText(text: "random text <a href='http://www.google.com'>http://www.google.com </a> more random text")

Выход: enter image description here

...