2016-11-30 7 views
1

Versuchen, einen ASTextNode (wie UILabel von AsyncDisplayKit) anzuzeigen, um einen HTML-Text anzuzeigen. Ich muss einfach den attributierten Text des Labels setzen.Ändern NSAttributedString HTML-Links Farbe

Es ist, wie ich meinen String arbeiten:

diese Erweiterung ich mit dem HTML-Text in eine NSAttributedString verwandeln:

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 ?? "" 
    } 
} 

Dann habe ich mein Label Details:

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

So Ich habe mein Etikett mit meiner Schriftart und es ist in Ordnung, Problem ist, dass ich die Links Farben meines Etiketts nicht ändern kann, es ist ein System blau, das ich will.

Irgendeine Idee, wie ich die Farben der Verbindungen ändern kann?

Danke.

+0

von Linkfarbe, tun Sie meine Unterstreichfarbe? – KrishnaCA

+0

Nein, die Textfarbe ist schwarz, die Links Farben sind blau – user2206906

Antwort

0

Die Linkfarbe kann auf folgende Weise geändert werden. Das folgende Beispiel wird zeigen, dass:

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)) 

Auch müssen Sie die folgenden Änderungen an der UITextView machen, dass es angezeigt wird.

textView.linkTextAttributes = [NSForegroundColorAttributeName : UIColor.black] 

Wenn Sie nicht UITextView verwenden möchten, dies zu tun, können Sie einfach TTTAttributedLabel verwenden. Es hat linkAttributes und Eigenschaft, die Sie verwenden können, um das gewünschte Verhalten zu erreichen, ohne UITextView zu verwenden.

Bitte lassen Sie mich wissen, ob es funktioniert oder nicht. Fühlen Sie sich frei, Änderungen vorzuschlagen, um es besser zu machen :)

+0

es ist nicht eine Textansicht, die ich benutze, ich kann nicht in Tabellenansicht, ich will nicht die Höhe berechnen, ich werde versuchen, danke – user2206906

+0

NSUnderlineStyleAttributeName einfach unterstreichen Der Link, ich möchte die Textfarbe des Links ändern. – user2206906

+0

Ich glaube, Sie haben es bereits mit 'attributedText.addAttribute (NSForegroundColorAttributeName, Wert: UIColor.black, Bereich: NSMakeRange (0, attributierteText.length))' versucht. Es hat nicht für mich funktioniert. Nur 'UITextView' hat' linkTextAttributes' Eigenschaft, und das ist der einzige Weg, der nicht coretext verwendet – KrishnaCA

0

Ok Leute, ich fand einen hässlichen Weg, dies zu tun.

nach dem HTML-Text zu einem NSMutableAttributedString Transformation, i einfach Schleife alle Attribute gedacht, wenn ich ein „NSLink“ -Attribut siehe i einfach ein Attribut für die Reichweite des Attribut hinzufügen:

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) 
        } 
       } 
      }