Comment utiliser NSAttributedString?
plusieurs couleurs dans un NSString
ou NSMutableStrings
ne sont pas possibles. J'ai donc entendu parler un peu du NSAttributedString
qui a été introduit avec le iPad SDK 3.2 (ou environ 3.2) et est disponible sur l'iPhone à partir de iPhone SDK 4.0 beta .
j'aimerais avoir une corde qui a trois couleurs.
la raison pour laquelle je n'utilise pas 3 nsstrings séparés, est parce que la longueur de chacun des trois NSAttributedString
substrats change souvent et donc je préférerais, ne pas utiliser des calculs pour re-position 3 séparés NSString
objets.
s'il est possible d'utiliser NSAttributedString
Comment puis - je faire ce qui suit - (si ce n'est pas possible avec nsattributed string comment le feriez-vous):
Edit:
Rappeler, @"first"
, @"second"
et @"third"
seront remplacés par d'autres chaînes à tout moment. Ainsi, l'utilisation de valeurs NSRange codées ne fonctionnera pas.
15 réponses
quand je construis des cordes attribuées, je préfère utiliser la sous-classe mutable, juste pour garder les choses propres.
cela étant dit, Voici comment vous créez une chaîne attribuée tri-couleur:
NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:@"firstsecondthird"];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,5)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(5,6)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(11,5)];
tapé dans un navigateur. mise en garde réalisateur de
évidemment vous n'allez pas au hard-code dans les gammes comme ça. Peut-être pourriez-vous plutôt faire quelque chose comme:
NSDictionary * wordToColorMapping = ....; //an NSDictionary of NSString => UIColor pairs
NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:@""];
for (NSString * word in wordToColorMapping) {
UIColor * color = [wordToColorMapping objectForKey:word];
NSDictionary * attributes = [NSDictionary dictionaryWithObject:color forKey:NSForegroundColorAttributeName];
NSAttributedString * subString = [[NSAttributedString alloc] initWithString:word attributes:attributes];
[string appendAttributedString:subString];
[subString release];
}
//display string
la question est déjà résolue... mais je voulais montrer comment ajouter shadow et changer la police avec NSAttributedString aussi, de sorte que lorsque les gens cherchent pour ce sujet, ils n'auront pas à continuer à chercher.
#define FONT_SIZE 20
#define FONT_HELVETICA @"Helvetica-Light"
#define BLACK_SHADOW [UIColor colorWithRed:40.0f/255.0f green:40.0f/255.0f blue:40.0f/255.0f alpha:0.4f]
NSString*myNSString = @"This is my string.\nIt goes to a second line.";
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.alignment = NSTextAlignmentCenter;
paragraphStyle.lineSpacing = FONT_SIZE/2;
UIFont * labelFont = [UIFont fontWithName:FONT_HELVETICA size:FONT_SIZE];
UIColor * labelColor = [UIColor colorWithWhite:1 alpha:1];
NSShadow *shadow = [[NSShadow alloc] init];
[shadow setShadowColor : BLACK_SHADOW];
[shadow setShadowOffset : CGSizeMake (1.0, 1.0)];
[shadow setShadowBlurRadius : 1];
NSAttributedString *labelText = [[NSAttributedString alloc] initWithString : myNSString
attributes : @{
NSParagraphStyleAttributeName : paragraphStyle,
NSKernAttributeName : @2.0,
NSFontAttributeName : labelFont,
NSForegroundColorAttributeName : labelColor,
NSShadowAttributeName : shadow }];
Voici une version Swift...
attention! Ça marche pour les 4.
Pour 5s, vous devez changer les valeurs Float Double des valeurs (parce que le compilateur ne fonctionne pas encore correctement)
Swift enum pour le choix de la police:
enum FontValue: Int {
case FVBold = 1 , FVCondensedBlack, FVMedium, FVHelveticaNeue, FVLight, FVCondensedBold, FVLightItalic, FVUltraLightItalic, FVUltraLight, FVBoldItalic, FVItalic
}
Swift tableau pour enum accès (nécessaire car enum ne pouvez pas utiliser le" -"):
func helveticaFont (index:Int) -> (String) {
let fontArray = [
"HelveticaNeue-Bold",
"HelveticaNeue-CondensedBlack",
"HelveticaNeue-Medium",
"HelveticaNeue",
"HelveticaNeue-Light",
"HelveticaNeue-CondensedBold",
"HelveticaNeue-LightItalic",
"HelveticaNeue-UltraLightItalic",
"HelveticaNeue-UltraLight",
"HelveticaNeue-BoldItalic",
"HelveticaNeue-Italic",
]
return fontArray[index]
}
Swift attribué texte de la fonction:
func myAttributedText (myString:String, mySize: Float, myFont:FontValue) -> (NSMutableAttributedString) {
let shadow = NSShadow()
shadow.shadowColor = UIColor.textShadowColor()
shadow.shadowOffset = CGSizeMake (1.0, 1.0)
shadow.shadowBlurRadius = 1
let paragraphStyle = NSMutableParagraphStyle.alloc()
paragraphStyle.lineHeightMultiple = 1
paragraphStyle.lineBreakMode = NSLineBreakMode.ByWordWrapping
paragraphStyle.alignment = NSTextAlignment.Center
let labelFont = UIFont(name: helveticaFont(myFont.toRaw()), size: mySize)
let labelColor = UIColor.whiteColor()
let myAttributes :Dictionary = [NSParagraphStyleAttributeName : paragraphStyle,
NSKernAttributeName : 3, // (-1,5)
NSFontAttributeName : labelFont,
NSForegroundColorAttributeName : labelColor,
NSShadowAttributeName : shadow]
let myAttributedString = NSMutableAttributedString (string: myString, attributes:myAttributes)
// add new color
let secondColor = UIColor.blackColor()
let stringArray = myString.componentsSeparatedByString(" ")
let firstString: String? = stringArray.first
let letterCount = countElements(firstString!)
if firstString {
myAttributedString.addAttributes([NSForegroundColorAttributeName:secondColor], range:NSMakeRange(0,letterCount))
}
return myAttributedString
}
première et dernière extension utilisée pour trouver des plages dans un tableau de chaînes:
extension Array {
var last: T? {
if self.isEmpty {
NSLog("array crash error - please fix")
return self [0]
} else {
return self[self.endIndex - 1]
}
}
}
extension Array {
var first: T? {
if self.isEmpty {
NSLog("array crash error - please fix")
return self [0]
} else {
return self [0]
}
}
}
nouvelles couleurs:
extension UIColor {
class func shadowColor() -> UIColor {
return UIColor(red: 0.0/255.0, green: 0.0/255.0, blue: 0.0/255.0, alpha: 0.3)
}
class func textShadowColor() -> UIColor {
return UIColor(red: 50.0/255.0, green: 50.0/255.0, blue: 50.0/255.0, alpha: 0.5)
}
class func pastelBlueColor() -> UIColor {
return UIColor(red: 176.0/255.0, green: 186.0/255.0, blue: 255.0/255.0, alpha: 1)
}
class func pastelYellowColor() -> UIColor {
return UIColor(red: 255.0/255.0, green: 238.0/255.0, blue: 140.0/255.0, alpha: 1)
}
}
ma macro de remplacement:
enum MyConstants: Float {
case CornerRadius = 5.0
}
my button maker w/attribué texte:
func myButtonMaker (myView:UIView) -> UIButton {
let myButton = UIButton.buttonWithType(.System) as UIButton
myButton.backgroundColor = UIColor.pastelBlueColor()
myButton.showsTouchWhenHighlighted = true;
let myCGSize:CGSize = CGSizeMake(100.0, 50.0)
let myFrame = CGRectMake(myView.frame.midX - myCGSize.height,myView.frame.midY - 2 * myCGSize.height,myCGSize.width,myCGSize.height)
myButton.frame = myFrame
let myTitle = myAttributedText("Button",20.0,FontValue.FVLight)
myButton.setAttributedTitle(myTitle, forState:.Normal)
myButton.layer.cornerRadius = myButton.bounds.size.width / MyConstants.CornerRadius.toRaw()
myButton.setTitleColor(UIColor.whiteColor(), forState: .Normal)
myButton.tag = 100
myButton.bringSubviewToFront(myView)
myButton.layerGradient()
myView.addSubview(myButton)
return myButton
}
mon UIView/UILabel maker w/attribué texte, d'ombre et d'arrondir les angles:
func myLabelMaker (myView:UIView) -> UIView {
let myFrame = CGRectMake(myView.frame.midX / 2 , myView.frame.midY / 2, myView.frame.width/2, myView.frame.height/2)
let mylabelFrame = CGRectMake(0, 0, myView.frame.width/2, myView.frame.height/2)
let myBaseView = UIView()
myBaseView.frame = myFrame
myBaseView.backgroundColor = UIColor.clearColor()
let myLabel = UILabel()
myLabel.backgroundColor=UIColor.pastelYellowColor()
myLabel.frame = mylabelFrame
myLabel.attributedText = myAttributedText("This is my String",20.0,FontValue.FVLight)
myLabel.numberOfLines = 5
myLabel.tag = 100
myLabel.layer.cornerRadius = myLabel.bounds.size.width / MyConstants.CornerRadius.toRaw()
myLabel.clipsToBounds = true
myLabel.layerborders()
myBaseView.addSubview(myLabel)
myBaseView.layerShadow()
myBaseView.layerGradient()
myView.addSubview(myBaseView)
return myLabel
}
shadow Générique ajouter:
func viewshadow<T where T: UIView> (shadowObject: T)
{
let layer = shadowObject.layer
let radius = shadowObject.frame.size.width / MyConstants.CornerRadius.toRaw();
layer.borderColor = UIColor.whiteColor().CGColor
layer.borderWidth = 0.8
layer.cornerRadius = radius
layer.shadowOpacity = 1
layer.shadowRadius = 3
layer.shadowOffset = CGSizeMake(2.0,2.0)
layer.shadowColor = UIColor.shadowColor().CGColor
}
vue de l'extension de vue du style:
extension UIView {
func layerborders() {
let layer = self.layer
let frame = self.frame
let myColor = self.backgroundColor
layer.borderColor = myColor.CGColor
layer.borderWidth = 10.8
layer.cornerRadius = layer.borderWidth / MyConstants.CornerRadius.toRaw()
}
func layerShadow() {
let layer = self.layer
let frame = self.frame
layer.cornerRadius = layer.borderWidth / MyConstants.CornerRadius.toRaw()
layer.shadowOpacity = 1
layer.shadowRadius = 3
layer.shadowOffset = CGSizeMake(2.0,2.0)
layer.shadowColor = UIColor.shadowColor().CGColor
}
func layerGradient() {
let layer = CAGradientLayer()
let size = self.frame.size
layer.frame.size = size
layer.frame.origin = CGPointMake(0.0,0.0)
layer.cornerRadius = layer.bounds.size.width / MyConstants.CornerRadius.toRaw();
var color0 = CGColorCreateGenericRGB(250.0/255, 250.0/255, 250.0/255, 0.5)
var color1 = CGColorCreateGenericRGB(200.0/255, 200.0/255, 200.0/255, 0.1)
var color2 = CGColorCreateGenericRGB(150.0/255, 150.0/255, 150.0/255, 0.1)
var color3 = CGColorCreateGenericRGB(100.0/255, 100.0/255, 100.0/255, 0.1)
var color4 = CGColorCreateGenericRGB(50.0/255, 50.0/255, 50.0/255, 0.1)
var color5 = CGColorCreateGenericRGB(0.0/255, 0.0/255, 0.0/255, 0.1)
var color6 = CGColorCreateGenericRGB(150.0/255, 150.0/255, 150.0/255, 0.1)
layer.colors = [color0,color1,color2,color3,color4,color5,color6]
self.layer.insertSublayer(layer, atIndex: 2)
}
}
le réel n'a de charge de la fonction:
func buttonPress (sender:UIButton!) {
NSLog("%@", "ButtonPressed")
}
override func viewDidLoad() {
super.viewDidLoad()
let myLabel = myLabelMaker(myView)
let myButton = myButtonMaker(myView)
myButton.addTarget(self, action: "buttonPress:", forControlEvents:UIControlEvents.TouchUpInside)
viewshadow(myButton)
viewshadow(myLabel)
}
je pense que c'est une façon très pratique d'utiliser regular expressions
pour trouver une plage pour appliquer les attributs. C'est comme ça que je l'ai fait:
NSMutableAttributedString *goodText = [[NSMutableAttributedString alloc] initWithString:articleText];
NSRange range = [articleText rangeOfString:@"\[.+?\]" options:NSRegularExpressionSearch|NSCaseInsensitiveSearch];
if (range.location != NSNotFound) {
[goodText addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Georgia" size:16] range:range];
[goodText addAttribute:NSForegroundColorAttributeName value:[UIColor brownColor] range:range];
}
NSString *regEx = [NSString stringWithFormat:@"%@.+?\s", [self.article.titleText substringToIndex:0]];
range = [articleText rangeOfString:regEx options:NSRegularExpressionSearch|NSCaseInsensitiveSearch];
if (range.location != NSNotFound) {
[goodText addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Georgia-Bold" size:20] range:range];
[goodText addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:range];
}
[self.textView setAttributedText:goodText];
je cherchais une liste d'attributs disponibles et je ne les ai pas trouvés ici et dans la première page d'une référence de classe. J'ai donc décidé de poster ici des informations sur que.
les chaînes attribuées supportent le standard suivant attributs pour le texte. Si la clé n'est pas dans le dictionnaire, puis utilisez les valeurs par défaut décrites ci-dessous.
NSString *NSFontAttributeName;
NSString *NSParagraphStyleAttributeName;
NSString *NSForegroundColorAttributeName;
NSString *NSUnderlineStyleAttributeName;
NSString *NSSuperscriptAttributeName;
NSString *NSBackgroundColorAttributeName;
NSString *NSAttachmentAttributeName;
NSString *NSLigatureAttributeName;
NSString *NSBaselineOffsetAttributeName;
NSString *NSKernAttributeName;
NSString *NSLinkAttributeName;
NSString *NSStrokeWidthAttributeName;
NSString *NSStrokeColorAttributeName;
NSString *NSUnderlineColorAttributeName;
NSString *NSStrikethroughStyleAttributeName;
NSString *NSStrikethroughColorAttributeName;
NSString *NSShadowAttributeName;
NSString *NSObliquenessAttributeName;
NSString *NSExpansionAttributeName;
NSString *NSCursorAttributeName;
NSString *NSToolTipAttributeName;
NSString *NSMarkedClauseSegmentAttributeName;
NSString *NSWritingDirectionAttributeName;
NSString *NSVerticalGlyphFormAttributeName;
NSString *NSTextAlternativesAttributeName;
NSAttributedString guide de programmation
une référence complète de classe est ici .
Cette solution fonctionnera pour n'importe quelle longueur
NSString *strFirst = @"Anylengthtext";
NSString *strSecond = @"Anylengthtext";
NSString *strThird = @"Anylengthtext";
NSString *strComplete = [NSString stringWithFormat:@"%@ %@ %@",strFirst,strSecond,strThird];
NSMutableAttributedString *attributedString =[[NSMutableAttributedString alloc] initWithString:strComplete];
[attributedString addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:[strComplete rangeOfString:strFirst]];
[attributedString addAttribute:NSForegroundColorAttributeName
value:[UIColor yellowColor]
range:[strComplete rangeOfString:strSecond]];
[attributedString addAttribute:NSForegroundColorAttributeName
value:[UIColor blueColor]
range:[strComplete rangeOfString:strThird]];
self.lblName.attributedText = attributedString;
j'ai écrit helper pour ajouter facilement des attributs:
- (void)addColor:(UIColor *)color substring:(NSString *)substring;
- (void)addBackgroundColor:(UIColor *)color substring:(NSString *)substring;
- (void)addUnderlineForSubstring:(NSString *)substring;
- (void)addStrikeThrough:(int)thickness substring:(NSString *)substring;
- (void)addShadowColor:(UIColor *)color width:(int)width height:(int)height radius:(int)radius substring:(NSString *)substring;
- (void)addFontWithName:(NSString *)fontName size:(int)fontSize substring:(NSString *)substring;
- (void)addAlignment:(NSTextAlignment)alignment substring:(NSString *)substring;
- (void)addColorToRussianText:(UIColor *)color;
- (void)addStrokeColor:(UIColor *)color thickness:(int)thickness substring:(NSString *)substring;
- (void)addVerticalGlyph:(BOOL)glyph substring:(NSString *)substring;
https://github.com/shmidt/MASAttributes
vous pouvez installer par CocoaPods aussi: pod 'MASAttributes', '~> 1.0.0'
depuis iOS 7, vous pouvez utiliser NSAttributedString
avec la syntaxe HTML:
NSURL *htmlString = [[NSBundle mainBundle] URLForResource: @"string" withExtension:@"html"];
NSAttributedString *stringWithHTMLAttributes = [[NSAttributedString alloc] initWithFileURL:htmlString
options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType}
documentAttributes:nil
error:nil];
textView.attributedText = stringWithHTMLAttributes;// you can use a label also
vous devez ajouter le fichier" chaîne.html" de votre projet, et le contenu de l'html, peut être comme ceci:
<html>
<head>
<style type="text/css">
body {
font-size: 15px;
font-family: Avenir, Arial, sans-serif;
}
.red {
color: red;
}
.green {
color: green;
}
.blue {
color: blue;
}
</style>
</head>
<body>
<span class="red">first</span><span class="green">second</span><span class="blue">third</span>
</body>
</html>
Maintenant, vous pouvez utiliser NSAttributedString
comme vous voulez, même sans fichier HTML, comme par exemple:
//At the top of your .m file
#define RED_OCCURENCE -red_occurence-
#define GREEN_OCCURENCE -green_occurence-
#define BLUE_OCCURENCE -blue_occurence-
#define HTML_TEMPLATE @"<span style=\"color:red\">-red_occurence-</span><span style=\"color:green\">-green_occurence-</span><span style=\"color:blue\">-blue_occurence-</span></body></html>"
//Where you need to use your attributed string
NSString *string = [HTML_TEMPLATE stringByReplacingOccurrencesOfString:RED_OCCURENCE withString:@"first"] ;
string = [string stringByReplacingOccurrencesOfString:GREEN_OCCURENCE withString:@"second"];
string = [string stringByReplacingOccurrencesOfString:BLUE_OCCURENCE withString:@"third"];
NSData* cData = [string dataUsingEncoding:NSUTF8StringEncoding];
NSAttributedString *stringWithHTMLAttributes = [[NSAttributedString alloc] initWithData:cData
options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType}
documentAttributes:nil
error:nil];
textView.attributedText = stringWithHTMLAttributes;
j'ai toujours trouvé que travailler avec des cordes attribuées était un processus incroyablement long et fastidieux.
donc j'ai fait une application Mac qui crée tout le code pour vous.
https://itunes.apple.com/us/app/attributed-string-creator/id730928349?mt=12
une solution plus facile avec l'extension de chaîne attribuée.
extension NSMutableAttributedString {
// this function attaches color to string
func setColorForText(textToFind: String, withColor color: UIColor) {
let range: NSRange = self.mutableString.range(of: textToFind, options: .caseInsensitive)
self.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range)
}
}
Essayer cela et voir (Testé en Swift 3 & 4)
let label = UILabel()
label.frame = CGRect(x: 120, y: 100, width: 200, height: 30)
let first = "first"
let second = "second"
let third = "third"
let stringValue = "\(first)\(second)\(third)" // or direct assign single string value like "firstsecondthird"
let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringValue)
attributedString.setColorForText(textToFind: first, withColor: UIColor.red) // use variable for string "first"
attributedString.setColorForText(textToFind: "second", withColor: UIColor.green) // or direct string like this "second"
attributedString.setColorForText(textToFind: third, withColor: UIColor.blue)
label.font = UIFont.systemFont(ofSize: 26)
label.attributedText = attributedString
self.view.addSubview(label)
voici le résultat attendu:
Dans Swift 4:
let string:NSMutableAttributedString = {
let mutableString = NSMutableAttributedString(string: "firstsecondthird")
mutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.red , range: NSRange(location: 0, length: 5))
mutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.green , range: NSRange(location: 5, length: 6))
mutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue , range: NSRange(location: 11, length: 5))
return mutableString
}()
print(string)
vous pouvez charger une chaîne attribuée HTML
dans Swift
comme suit
var Str = NSAttributedString(
data: htmlstring.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true),
options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil,
error: nil)
label.attributedText = Str
pour charger un html
à partir du fichier
if let rtf = NSBundle.mainBundle().URLForResource("rtfdoc", withExtension: "rtf", subdirectory: nil, localization: nil) {
let attributedString = NSAttributedString(fileURL: rtf, options: [NSDocumentTypeDocumentAttribute:NSRTFTextDocumentType], documentAttributes: nil, error: nil)
textView.attributedText = attributedString
textView.editable = false
}
http://sketchytech.blogspot.in/2013/11/creating-nsattributedstring-from-html.html
et setup string selon votre attribut requis....suivre cette..
http://makeapppie.com/2014/10/20/swift-swift-using-attributed-strings-in-swift /
j'ai fait une bibliothèque qui rend ce beaucoup plus facile. Découvrez ZenCopy.
vous pouvez créer des objets Style, et/ou les mettre à des clés de référence plus tard. Comme ceci:
ZenCopy.manager.config.setStyles {
return [
"token": Style(
color: .blueColor(), // optional
// fontName: "Helvetica", // optional
fontSize: 14 // optional
)
]
}
alors, vous pouvez facilement construire des cordes et les style et avoir des params:)
label.attributedText = attributedString(
[""151910920" ".style("token") "is dancing with ", "".style("token")],
args: ["JP", "Brock"]
)
vous pouvez également style choses facilement avec des recherches regex!
let atUserRegex = "(@[A-Za-z0-9_]*)"
mutableAttributedString.regexFind(atUserRegex, addStyle: "token")
cela va style tous les mots avec '@' devant le 'token' style. (par exemple @jpmcglone)
j'ai encore besoin de le faire fonctionner avec tout ce que NSAttributedString
a à offrir, mais je pense que fontName
, fontSize
et la couleur couvrent la majeure partie de celui-ci. Attendez-vous à beaucoup de mises à jour bientôt :)
je peux vous aider à commencer avec ça si vous avez besoin. Je cherche aussi des commentaires, donc si ça te facilite la vie, je dirais mission accomplie.
- (void)changeColorWithString:(UILabel *)uilabel stringToReplace:(NSString *) stringToReplace uiColor:(UIColor *) uiColor{
NSMutableAttributedString *text =
[[NSMutableAttributedString alloc]
initWithAttributedString: uilabel.attributedText];
[text addAttribute: NSForegroundColorAttributeName value:uiColor range:[uilabel.text rangeOfString:stringToReplace]];
[uilabel setAttributedText: text];
}
pour résoudre ce genre de problèmes, j'ai créé bibliothèque dans swift qui s'appelle Atributika.
let str = "<r>first</r><g>second</g><b>third</b>".style(tags:
Style("r").foregroundColor(.red),
Style("g").foregroundColor(.green),
Style("b").foregroundColor(.blue)).attributedString
label.attributedText = str
vous pouvez le trouver ici https://github.com/psharanda/Atributika
Swift 4
let combination = NSMutableAttributedString()
var part1 = NSMutableAttributedString()
var part2 = NSMutableAttributedString()
var part3 = NSMutableAttributedString()
let attrRegular = [NSAttributedStringKey.font : UIFont(name: "Palatino-Roman", size: 15)]
let attrBold:Dictionary = [NSAttributedStringKey.font : UIFont(name: "Raleway-SemiBold", size: 15)]
let attrBoldWithColor: Dictionary = [NSAttributedStringKey.font : UIFont(name: "Raleway-SemiBold", size: 15),
NSAttributedStringKey.foregroundColor: UIColor.red]
if let regular = attrRegular as? [NSAttributedStringKey : NSObject]{
part1 = NSMutableAttributedString(string: "first", attributes: regular)
}
if let bold = attrRegular as? [NSAttributedStringKey : NSObject]{
part2 = NSMutableAttributedString(string: "second", attributes: bold)
}
if let boldWithColor = attrBoldWithColor as? [NSAttributedStringKey : NSObject]{
part3 = NSMutableAttributedString(string: "third", attributes: boldWithColor)
}
combination.append(part1)
combination.append(part2)
combination.append(part3)
liste des Attributs veuillez voir ici NSAttributedStringKey sur Apple Docs
très facile à faire.
let text = "This is a colorful attributed string"
let attributedText =
NSMutableAttributedString.getAttributedString(fromString: text)
attributedText.apply(color: .red, subString: "This")
//Apply yellow color on range
attributedText.apply(color: .yellow, onRange: NSMakeRange(5, 4))
Pour plus de détails cliquez ici; https://github.com/iOSTechHub/AttributedString