Ändern Sie die Farbe eines Links in einem NSMutableAttributedString

76

Ich habe den folgenden Code, aber meine Links sind immer blau. Wie kann ich die Farbe von ihnen ändern?

[_string addAttribute:NSLinkAttributeName value:tag range:NSMakeRange(position, length)];
[_string addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"HelveticaNeue-Bold" size:(12.0)] range:NSMakeRange(position, length)];
[_string addAttribute:NSStrokeColorAttributeName value:[UIColor greenColor] range:NSMakeRange(position, length)];

_string ist ein NSMutableAttributedString und die Position und Länge funktionieren einwandfrei.

cdub
quelle
1
Ich habe dies verwendet: stackoverflow.com/questions/25457131/…
cdub
Wenn Sie der Meinung sind, dass die Frage von einem Benutzer angemessen beantwortet wurde, wählen Sie sie bitte als akzeptierte Antwort aus.
Will Von Ullrich

Antworten:

179

Schnell

Aktualisiert für Swift 4.2

Verwenden Sie linkTextAttributesmit einemUITextView

textView.linkTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.green]

Und im Kontext:

let attributedString = NSMutableAttributedString(string: "The site is www.google.com.")
let linkRange = (attributedString.string as NSString).range(of: "www.google.com")
attributedString.addAttribute(NSAttributedString.Key.link, value: "https://www.google.com", range: linkRange)
let linkAttributes: [NSAttributedString.Key : Any] = [
    NSAttributedString.Key.foregroundColor: UIColor.green,
    NSAttributedString.Key.underlineColor: UIColor.lightGray,
    NSAttributedString.Key.underlineStyle: NSUnderlineStyle.single.rawValue
]

// textView is a UITextView
textView.linkTextAttributes = linkAttributes
textView.attributedText = attributedString

Ziel c

Verwenden Sie linkTextAttributesmit einemUITextView

textView.linkTextAttributes = @{NSForegroundColorAttributeName:[UIColor greenColor]};

Quelle: diese Antwort

Und aus diesem Beitrag :

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"This is an example by @marcelofabri_"];
[attributedString addAttribute:NSLinkAttributeName
                         value:@"username://marcelofabri_"
                         range:[[attributedString string] rangeOfString:@"@marcelofabri_"]];


NSDictionary *linkAttributes = @{NSForegroundColorAttributeName: [UIColor greenColor],
                                 NSUnderlineColorAttributeName: [UIColor lightGrayColor],
                                 NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle)};

// assume that textView is a UITextView previously created (either by code or Interface Builder)
textView.linkTextAttributes = linkAttributes; // customizes the appearance of links
textView.attributedText = attributedString;
textView.delegate = self;
Suragch
quelle
Ich konnte die Linkfarbe ändern, aber wie kann ich die Farbe ändern, die angezeigt wird, wenn Sie den Link weiter drücken?
Mago Nicolas Palacios
45

Die Linkfarbe ist die Farbtonfarbe der Beschriftung / Textansicht. Sie können es also ändern, indem Sie die Farbtonfarbe der Ansicht ändern. Dies funktioniert jedoch nicht, wenn Sie unterschiedliche Linkfarben in derselben Ansicht wünschen.

Crcalin
quelle
Arbeiten für mich auf iOS 12.
Iris Veriris
Funktioniert gut für UITextView
Deepblue
8
Funktioniert nicht in Xcode 11.2.1, Swift 5 für UILabel @crcalin
ios
7

Schnell

 let str = "By using this app you agree to our Terms and Conditions and Privacy Policy"
 let attributedString = NSMutableAttributedString(string: str)
 var foundRange = attributedString.mutableString.rangeOfString("Terms and Conditions")

 attributedString.addAttribute(NSLinkAttributeName, value: termsAndConditionsURL, range: foundRange)
 foundRange = attributedString.mutableString.rangeOfString("Privacy Policy")
 attributedString.addAttribute(NSLinkAttributeName, value: privacyURL, range: foundRange)
 policyAndTermsTextView.attributedText = attributedString
 policyAndTermsTextView.linkTextAttributes = [NSForegroundColorAttributeName : UIColor.blueColor()]
Dasoga
quelle
1
 NSAttributedString* attributedString = [[NSAttributedString alloc] initWithString:@"here" attributes:@{ @"myCustomTag" : @(YES), NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName:[UIFont fontWithName:@"SourceSansPro-Semibold" size:15], NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle) }];

Ziel c

Dadurch wird unterstrichener weißer anklickbarer Text angezeigt. Wählen Sie die erforderlichen Attribute für Ihren Code aus und verwenden Sie ihn.

Um eine Zeichenfolge mit anklickbarem Link zu haben, gehen Sie wie folgt vor:

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Click " attributes:@{NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName:[UIFont fontWithName:@"SourceSansPro-Semibold" size:15]}];
NSAttributedString* attributedString = [[NSAttributedString alloc] initWithString:@"here" attributes:@{ @"myCustomTag" : @(YES), NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName:[UIFont fontWithName:@"SourceSansPro-Semibold" size:15], NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle) }];
[string appendAttributedString:attributedString];

Als Ergebnis erhalten Sie die Zeichenfolge "Klicken Sie hier" und "hier" ist ein Link. Sie können für jede Zeichenfolge unterschiedliche Stile festlegen.

Victorianec
quelle
1

Für swift3.0

  override func viewDidLoad() {
     super.viewDidLoad()

  let linkAttributes = [
        NSLinkAttributeName: NSURL(string: "http://stalwartitsolution.co.in/luminutri_flow/terms-condition")!
        ] as [String : Any]
  let attributedString = NSMutableAttributedString(string: "Please tick box to confirm you agree to our Terms & Conditions, Privacy Policy, Disclaimer. ")

  attributedString.setAttributes(linkAttributes, range: NSMakeRange(44, 18))

  attributedString.addAttribute(NSUnderlineStyleAttributeName, value: NSNumber(value: 1), range: NSMakeRange(44, 18))

  textview.delegate = self
  textview.attributedText = attributedString
  textview.linkTextAttributes = [NSForegroundColorAttributeName: UIColor.red]
  textview.textColor = UIColor.white
  }


  func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
    return true
   }
Maulik Patel
quelle