J'ai l'impression qu'il me manque quelque chose de facile mais je n'arrive pas à trouver comment faire ceci:
J'ai défini l'attribut sur un lien comme suit:
[myAttrString addAttribute:NSLinkAttributeName value:linkURL range:selectedRange];
Cela fonctionne mais le lien est bleu et je n'arrive pas à changer la couleur. Ceci définit tout sauf le lien vers le blanc:
[myAttrString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:selectedRange];
Y a-t-il un autre nom d'attribut de couleur que je n'arrive pas à trouver qui soit spécifique aux liens?
UITextView
Définissez la UITextView
's linkTextAttributes
comme suit:
textView.linkTextAttributes = @{NSForegroundColorAttributeName:[UIColor whiteColor]};
En fait, j'ai fini par utiliser TTTAttributedLabel pour mon étiquette, puis j'ai pu faire ce qui suit parfaitement bien:
NSDictionary *linkAttributes = @{(id)kCTForegroundColorAttributeName: [UIColor whiteColor],
(id)kCTUnderlineStyleAttributeName: [NSNumber numberWithInt:kCTUnderlineStyleSingle]
};
self.lblDescription.linkAttributes = linkAttributes;
txtLabel.linkAttributes = @{};
C’est le bon, appelez cette ligne avant de définir tout autre attribut
Pour Swift (pour référence pour les autres):
// Color the links
var linkAttributes: NSMutableDictionary = NSMutableDictionary()
linkAttributes.setValue(self.appDelegate.variables.color320, forKey: NSForegroundColorAttributeName)
myTextView.linkTextAttributes = linkAttributes as [NSObject : AnyObject]
Cela fonctionne pour moi:
txtLabel.linkAttributes = @{};
NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:expression];
{
[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:result.range];
[string addAttribute:NSLinkAttributeName value:@"link" range:result.range];
}
Pour Swift 3
var aURL = "Http:// Your URL"
var description = "Click Me:"
let attributedString = NSMutableAttributedString(string: description + aURL)
/// Deal with link color
let foundURLRange = attributedString.mutableString.range(of: aURL)
attributedString.addAttribute(NSLinkAttributeName, value: aURL, range: foundURLRange)
textview.linkTextAttributes = [NSForegroundColorAttributeName: UIColor.yellow]
/// Deal with description color
let foundDescriptionRange = attributedString.mutableString.range(of: description)
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.red, range: foundDescriptionRange)
textview.attributedText = attributedString
Explication:
Ceci est étonnamment facile, les composants texte prenant en charge link detection ont une propriété appelée linkTextAttributes
.
Cette propriété stocke le style pour le lien dès que le composant peut l'appliquer lorsque détecte un nouveau lien.
En résumé, votre style sera appliqué, puis le style stocké dans cette propriété (dans cet ordre), remplaçant avec succès votre style souhaité.
Solution:
Définissez cette propriété sur vide (linkTextAttributes = [:]
) et prenez le contrôle total de vos styles de liens.
CONSEIL: Ceci peut être utilisé pour créer des éléments touchable sur votre
UITextView
qui se comportent comme un bouton . Créer un effet vraiment sympa ????