2016-11-30 10 views
1

Пытается отобразить ASTextNode (то же, что и UILabel из AsyncDisplayKit), чтобы отобразить html-текст. Мне просто нужно установить атрибут, на который был нанесен ярлык.Изменение NSAttributedString html links color

Существует, как я работаю мои строки:

Используя это расширение я преобразовать текст HTML в NSAttributedString:

extension String { 
    var html2AttributedString: NSAttributedString? { 
     guard let data = data(using: .utf8) else { return nil } 
     do { 
      return try NSAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue], documentAttributes: nil) 
     } catch let error as NSError { 
      print(error.localizedDescription) 
      return nil 
     } 
    } 
    var html2String: String { 
     return html2AttributedString?.string ?? "" 
    } 
} 

Тогда я установить мои данные этикетки:

self.displayContent = NSMutableAttributedString(attributedString: content.html2AttributedString!) 
self.displayContent?.addAttribute(NSFontAttributeName, value: UIFont.fontMainFeedContentFont(), range: NSRange.init(location: 0, length: self.displayContent!.length)) 

Так У меня есть мой ярлык с моим шрифтом, и все в порядке, проблема в том, что я не могу изменить цвета ссылок на моем ярлыке, это синяя система, которую я хочу.

Любая идея, как я могу изменить цвета ссылок?

Спасибо.

+0

По цвету ссылок, да средний цвет подчеркивания? – KrishnaCA

+0

Нет, цвет текста черный, цвета ссылок - синий – user2206906

ответ

0

Цвет ссылки может быть изменен следующим образом. Ниже пример демонстрирует, что:

let attributedText:NSMutableAttributedString = NSMutableAttributedString(string: "why?") 
attributedText.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.styleSingle, range: NSMakeRange(0, attributedText.length)) 
attributedText.addAttribute(NSUnderlineColorAttributeName, value: UIColor.black, range: NSMakeRange(0, attributedText.length)) 
attributedText.addAttribute(NSForegroundColorAttributeName, value: UIColor.black, range: NSMakeRange(0, attributedText.length)) 

Кроме того, вы должны сделать следующие изменения в UITextView, который отображающие его.

textView.linkTextAttributes = [NSForegroundColorAttributeName : UIColor.black] 

Если вы не хотите использовать UITextView, чтобы сделать это, вы можете просто использовать TTTAttributedLabel. Он имеет linkAttributes и activeLinkAttributes свойство, которое вы можете использовать для достижения желаемого поведения без использования UITextView.

Пожалуйста, дайте мне знать, если это работает или нет. Не стесняйтесь предлагать изменения, чтобы сделать это лучше :)

+0

Это не текстовое изображение, которое я использую, я не могу его видеть в таблице, я не хочу вычислять высоту, я попробую поблагодарить u – user2206906

+0

NSUnderlineStyleAttributeName просто подчеркнуть ссылку, я хочу изменить цвет текста ссылки. – user2206906

+0

Я считаю, что вы уже пробовали это, используя 'attributedText.addAttribute (NSForegroundColorAttributeName, значение: UIColor.black, range: NSMakeRange (0, attribitedText.length)). Это не сработало для меня. Только 'UITextView' имеет свойство linkTextAttributes', и это единственный способ, который не использует coretext – KrishnaCA

0

Хорошо, ребята, я нашел уродливый способ сделать это.

После преобразования HTML текста в NSMutableAttributedString, я просто цикл думал, все атрибуты, когда я вижу атрибут «NSLink» я просто добавить атрибут для диапазона атрибута:

self.myString!.enumerateAttributes(in: NSRange(0..<myString!.length), options: []) { (attributes, range, _) -> Void in 
       for (attribute, object) in attributes { 
        if attribute == "NSLink" { 
         print("Attribute = \(attribute) -- \(object)") 
         self.myString?.addAttribute(NSForegroundColorAttributeName, value: StyleKit.color_blue_bright, range: range) 
         self.myString?.addAttribute(NSUnderlineColorAttributeName, value: UIColor.clear, range: range) 
        } 
       } 
      }