iOS
NSAttributedString
Recherche…
Remarques
Création d'une chaîne comportant un crénage personnalisé (espacement des lettres)
NSAttributedString
(et son frère modifiable NSMutableAttributedString
) vous permet de créer des chaînes complexes dans leur apparence pour l'utilisateur.
Une application courante consiste à utiliser cette option pour afficher une chaîne et ajouter un crénage / espacement des lettres personnalisé.
Cela se ferait comme suit (où label est un UILabel
), donnant un crénage différent pour le mot "kerning"
Rapide
var attributedString = NSMutableAttributedString("Apply kerning")
attributedString.addAttribute(attribute: NSKernAttributeName, value: 5, range: NSMakeRange(6, 7))
label.attributedText = attributedString
Objectif c
NSMutableAttributedString *attributedString;
attributedString = [[NSMutableAttributedString alloc] initWithString:@"Apply kerning"];
[attributedString addAttribute:NSKernAttributeName value:@5 range:NSMakeRange(6, 7)];
[label setAttributedText:attributedString];
Créer une chaîne avec un texte barré
Objectif c
NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:@"Your String here"];
[attributeString addAttribute:NSStrikethroughStyleAttributeName
value:@2
range:NSMakeRange(0, [attributeString length])];
Rapide
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "Your String here")
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))
Ensuite, vous pouvez ajouter ceci à votre UILabel:
yourLabel.attributedText = attributeString;
Ajout de chaînes attribuées et de texte en gras dans Swift
let someValue : String = "Something the user entered"
let text = NSMutableAttributedString(string: "The value is: ")
text.appendAttributedString(NSAttributedString(string: someValue, attributes: [NSFontAttributeName:UIFont.boldSystemFontOfSize(UIFont.systemFontSize())]))
Le résultat ressemble à:
La valeur est: Quelque chose que l'utilisateur a entré
Changer la couleur d'un mot ou d'une chaîne
Objectif c
UIColor *color = [UIColor redColor];
NSString *textToFind = @"redword";
NSMutableAttributedString *attrsString = [[NSMutableAttributedString alloc] initWithAttributedString:yourLabel.attributedText];
// search for word occurrence
NSRange range = [yourLabel.text rangeOfString:textToFind];
if (range.location != NSNotFound) {
[attrsString addAttribute:NSForegroundColorAttributeName value:color range:range];
}
// set attributed text
yourLabel.attributedText = attrsString;
Rapide
let color = UIColor.red;
let textToFind = "redword"
let attrsString = NSMutableAttributedString(string:yourlabel.text!);
// search for word occurrence
let range = (yourlabel.text! as NSString).range(of: textToFind)
if (range.length > 0) {
attrsString.addAttribute(NSForegroundColorAttributeName,value:color,range:range)
}
// set attributed text
yourlabel.attributedText = attrsString
Note :
La principale consiste à utiliser un NSMutableAttributedString
et le sélecteur addAttribute:value:range
avec l'attribut NSForegroundColorAttributeName
pour changer la couleur d'une plage de chaînes:
NSMutableAttributedString *attrsString = [[NSMutableAttributedString alloc] initWithAttributedString:label.attributedText];
[attrsString addAttribute:NSForegroundColorAttributeName value:color range:range];
Vous pouvez utiliser un autre moyen pour obtenir la plage, par exemple: NSRegularExpression.
Supprimer tous les attributs
Objectif c
NSMutableAttributedString *mutAttString = @"string goes here";
NSRange range = NSMakeRange(0, mutAttString.length);
[mutAttString setAttributes:@{} range:originalRange];
Conformément à la documentation Apple, nous utilisons setAttributes
et pas addAttribute
.
Rapide
mutAttString.setAttributes([:], range: NSRange(0..<string.length))