2013-03-13 4 views
32

Ich möchte, dass einige Wörter in meinem OHAttributedLabel Links sind, aber ich möchte, dass sie andere Farben als blau sind und ich möchte die Unterstreichung nicht.Link in UILabel.attributedText machen * nicht * blau und * nicht * unterstrichen

Dies wird mir eine blaue Verbindung mit unterstrichenen Text geben:

-(void)createLinkFromWord:(NSString*)word withColor:(UIColor*)color atRange:(NSRange)range{ 

    NSMutableAttributedString* mutableAttributedText = [self.label.attributedText mutableCopy]; 

    [mutableAttributedText beginEditing]; 
    [mutableAttributedText addAttribute:kOHLinkAttributeName 
        value:[NSURL URLWithString:@"http://www.somewhere.net"] 
        range:range]; 

    [mutableAttributedText addAttribute:(id)kCTForegroundColorAttributeName 
        value:color 
        range:range]; 

    [mutableAttributedText addAttribute:(id)kCTUnderlineStyleAttributeName 
        value:[NSNumber numberWithInt:kCTUnderlineStyleNone] 
        range:range]; 
    [mutableAttributedText endEditing]; 


    self.label.attributedText = mutableAttributedText; 

} 

Da ich verwende OHAttributedLabel, ich habe auch versucht, die Methoden in es NSAttributedString+Attributes.h Kategorie ist, aber die Rückkehr blauen Links unterstrichen auch:

Wenn ich die Zeile, die die Links in jeder Version setzt, auskommentiere, wird der Text farbig zu dem, was ich passiere - das funktioniert. Es scheint nur so zu sein, als setze ich den Link so, dass er dies überschreibt und es wieder blau macht.

gefunden Leider zeigt ich den Apfel docs Seite, wie Sie den Link-Text zu blau setzen und sie unterstreichen, genau das, was ich nicht brauche: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/AttributedStrings/Tasks/ChangingAttrStrings.html

Antwort

59

So landete ich mit TTTAttributedLabel up:

-(void)createLinkFromWord:(NSString*)word withColor:(UIColor*)color atRange:(NSRange)range{ 
    NSMutableAttributedString* newTextWithLinks = [self.label.attributedText mutableCopy]; 
    NSURL *url = [NSURL URLWithString:@"http://www.reddit.com"]; 
    self.label.linkAttributes = @{NSForegroundColorAttributeName: color, 
            NSUnderlineStyleAttributeName: @(NSUnderlineStyleNone)}; 
    [self.label addLinkToURL:url withRange:range]; 
} 

Ich fand, dass OHAttributedLabel tatsächlich Methoden zum Festlegen von Verknüpfungen und zum Deklarieren von Farben und Unterstreichungen für diese Links haben. Ich wollte jedoch, dass die Links basierend auf einem Parameter verschiedene Farben haben. TTTAttributedLabel ermöglicht dies, indem Sie die Eigenschaft linkAttributes für jede Verknüpfung festlegen, die Sie erstellen.

+14

Achten Sie außerdem darauf einstellen 'linkAttributes' vor dem Hinzufügen eines Links zum Etikett. – damirstuhec

+0

Gibt es keine andere Möglichkeit, die Linkfarbe einzustellen, außer bei einigen Github-Projekten? Die Eigenschaft linkAttributes ist für ein UILabel nicht verfügbar. – TheJeff

22

Hier ist meine verbesserte Version von Ramsel bereits große Antwort. Ich glaube, es ist viel lesbarer, und ich hoffe, es wird zu einem guten Zweck kommen.

label.linkAttributes = @{ NSForegroundColorAttributeName: [UIColor whiteColor], 
          NSUnderlineStyleAttributeName: [NSNumber numberWithInt:NSUnderlineStyleSingle] }; 

Hier ist a list of other attibute names.

23

Ich verwende TTTAttributedLabel. Ich wollte die Farbe des verknüpften Textes ändern und unterstrichen halten. Pims Antwort sah großartig aus, funktionierte aber nicht für mich. Hier ist, was funktioniert hat:

label.linkAttributes = @{ (id)kCTForegroundColorAttributeName: [UIColor magentaColor], 
          (id)kCTUnderlineStyleAttributeName : [NSNumber numberWithInt:NSUnderlineStyleSingle] }; 

Hinweis: Wenn Sie nicht der Text unterstrichen, dann die aus dem Wörterbuch kCTUnderlineStyleAttributeName Schlüssel abziehen.

+0

Großartig! Das funktioniert auch für mich. Aber andere Antworten nicht. –

+0

Ja, nur diese Antwort funktioniert! Die Verwendung von NSForegroundColorAttributeName macht keinen Sinn. Sie müssen kCTForegroundColorAttributeName verwenden. Siehe [diese Ausgabe] (https://github.com/TTTAttributedLabel/TTTAttributedLabel/issues/455) – flashlib

7

Wenn Sie eine UITextView verwenden, können Sie die tintColor ändern müssen, um die Linkfarbe

+0

Dies ist die einzige gültige Lösung. Alle anderen sind falsch. –

5

Swift 2 zu ändern.3 Beispiel für TTTAttributedLabel:

yourLabel.linkAttributes  = [ 
    NSForegroundColorAttributeName: UIColor.grayColor(), 
    NSUnderlineStyleAttributeName: NSNumber(bool: true) 
] 
yourLabel.activeLinkAttributes = [ 
    NSForegroundColorAttributeName: UIColor.grayColor().colorWithAlphaComponent(0.8), 
    NSUnderlineStyleAttributeName: NSNumber(bool: false) 
] 

Swift 4

yourLabel.linkAttributes = [ 
    NSAttributedStringKey.foregroundColor: UIColor.grayColor(), 
    NSAttributedStringKey.underlineStyle: NSNumber(value: true) 
] 
yourLabel.activeLinkAttributes = [ 
    NSAttributedStringKey.foregroundColor: UIColor.grayColor().withAlphaComponent(0.7), 
    NSAttributedStringKey.underlineStyle: NSNumber(value: false) 
] 
0

Swift 3 Beispiel für TTTAttributedLabel:

yourLabel.linkAttributes = [ 
    NSForegroundColorAttributeName: UIColor.green, 
    NSUnderlineStyleAttributeName: NSNumber(value: NSUnderlineStyle.styleNone.rawValue) 
] 
yourLabel.activeLinkAttributes = [ 
    NSForegroundColorAttributeName: UIColor.green, 
    NSUnderlineStyleAttributeName: NSNumber(value: NSUnderlineStyle.styleDouble.rawValue) 
] 
0

für SWIFT 3 unter Verwendung von TTTAttributedLabel

let title: NSString = "Fork me on GitHub!" 

var attirutedDictionary = NSMutableDictionary(dictionary:attributedLabel.linkAttributes) 

attirutedDictionary[NSForegroundColorAttributeName] = UIColor.red 
attirutedDictionary[NSUnderlineStyleAttributeName] = NSNumber(value: NSUnderlineStyle.styleNone.rawValue) 

attributedLabel.attributedText = NSAttributedString(string: title as String) 
attributedLabel.linkAttributes = attirutedDictionary as! [AnyHashable: Any] 

let range = subtitleTitle.range(of: "me") 
let url = URL(string: "http://github.com/mattt/") 

attributedLabel.addLink(to: url, with: range) 
0

Für Swif t 3 folgende Art und Weise arbeitete für mich mit TTTAttributedLabel:

1) Fügen Sie ein Label auf dem Storyboard und definiert seine Klasse TTTAttributedLabel Storyboard view

2) In-Code zu definieren @IBOutlet var termsLabel: TTTAttributedLabel!

3) Dann in ViewDidLoad diese Zeilen schreiben

let textString = "By using this app you agree to the Privacy Policy & Terms & Conditions." 
guard let labelString = termsLabel.attributedText else { 
      return 
     } 
     guard let privacyRange = labelString.string.range(of: "Privacy Policy") else { 
      return 
     } 
     guard let termsConditionRange = labelString.string.range(of: "Terms & Conditions") else { 
      return 
     } 

     let privacyNSRange: NSRange = labelString.string.nsRange(from: privacyRange) 
     let termsNSRange: NSRange = labelString.string.nsRange(from: termsConditionRange) 

     termsLabel.addLink(to: URL(string: "privacy"), with: privacyNSRange) 
     termsLabel.addLink(to: URL(string: "terms"), with: termsNSRange) 

     termsLabel.delegate = self 
     let attributedText = NSMutableAttributedString(attributedString: termsLabel.attributedText!) 
     attributedText.addAttributes([NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 12)!], range: termsNSRange) 
     attributedText.addAttributes([NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 12)!], range: privacyNSRange) 
     attributedText.addAttributes([kCTForegroundColorAttributeName as String: UIColor.orange], range: termsNSRange) 
     attributedText.addAttributes([kCTForegroundColorAttributeName as String: UIColor.green], range: privacyNSRange) 
     attributedText.addAttributes([NSUnderlineStyleAttributeName: NSUnderlineStyle.styleNone.rawValue], range: termsNSRange) 
     attributedText.addAttributes([NSUnderlineStyleAttributeName: NSUnderlineStyle.styleNone.rawValue], range: privacyNSRange) 
     termsLabel.attributedText = attributedText 

es so aussehen würde Simulator View

4) schreiben Sie schließlich die Delegatfunktion von TTTAttributedLabel, so dass Sie Links vom Fass

public func attributedLabel(_ label: TTTAttributedLabel!, didSelectLinkWith url: URL!) { 
    switch url.absoluteString { 
    case "privacy": 
     SafariBrowser.open("http://google.com", presentingViewController: self) 
    case "terms": 
     SafariBrowser.open("http://google.com", presentingViewController: self) 
    default: 
     break 
    } 
} 
0

Swift 3 öffnen:

// apply link attributes to label.attributedString, then 
label.tintColor = UIColor.red // any color you want 
Verwandte Themen