ios - ¿Cómo usas NSAttributedString?
ios4 textcolor (15)
Creo que es una forma muy conveniente de usar regular expressions
para encontrar un rango para aplicar atributos. Así es como lo hice:
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];
Estaba buscando una lista de atributos disponibles y no los encontré aquí ni en la primera página de una referencia de clase. Así que decidí publicar aquí información sobre eso.
Las cadenas atribuidas admiten los siguientes atributos estándar para texto. Si la clave no está en el diccionario, use los valores predeterminados que se describen a continuación.
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;
Guía de programación de NSAttributedString
Una referencia completa de la clase está here .
Los colores múltiples en una NSString
o NSMutableStrings
no son posibles. Así que escuché un poco sobre el NSAttributedString
que se introdujo con el iPad SDK 3.2 (o alrededor de 3.2) y está disponible en el iPhone a partir del iPhone SDK 4.0 beta .
Me gustaría tener una cadena que tiene tres colores.
La razón por la que no uso 3 NSStrings separados, es porque la longitud de cada una de las tres subcadenas NSAttributedString
cambia con frecuencia y, por lo tanto, preferiría no usar ningún cálculo para volver a colocar 3 objetos NSString
separados.
Si es posible usar NSAttributedString
¿cómo hago lo siguiente? (Si no es posible con la cadena NSAttributed, ¿cómo lo haría?)
Edición: recuerde, @"first"
, @"second"
y @"third"
serán reemplazados por otras cadenas en cualquier momento. Por lo tanto, usar valores codificados de NSRange no funcionará.
Cuando construyo cadenas atribuidas, prefiero usar la subclase mutable, solo para mantener las cosas más limpias.
Dicho esto, aquí se muestra cómo se crea una cadena con tres colores:
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)];
escribió en un navegador. implementador de advertencia
Obviamente no vas a codificar en los rangos como este. Quizás en su lugar podrías hacer algo como:
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
Desde iOS 7 puedes usar NSAttributedString
con sintaxis 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
Debe agregar el archivo "string.html" a su proyecto, y el contenido del html puede ser así:
<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>
Ahora, puedes usar NSAttributedString
como quieras, incluso sin archivo HTML, como por ejemplo:
//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;
En 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)
Escribí helper para agregar atributos fácilmente:
- (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
También puede instalar a través de CocoaPods: pod ''MASAttributes'', ''~> 1.0.0''
Esta solución funcionará para cualquier longitud
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;
Hice una biblioteca que hace esto mucho más fácil. Echa un vistazo a ZenCopy.
Puede crear objetos de estilo y / o establecerlos como claves para consultarlos más adelante. Me gusta esto:
ZenCopy.manager.config.setStyles {
return [
"token": Style(
color: .blueColor(), // optional
// fontName: "Helvetica", // optional
fontSize: 14 // optional
)
]
}
Luego, puedes construir cadenas fácilmente y estilizarlas Y tener parámetros :)
label.attributedText = attributedString(
["$0 ".style("token") "is dancing with ", "$1".style("token")],
args: ["JP", "Brock"]
)
¡También puedes estilizar las cosas fácilmente con búsquedas de expresiones regulares!
let atUserRegex = "(@[A-Za-z0-9_]*)"
mutableAttributedString.regexFind(atUserRegex, addStyle: "token")
Esto estilizará todas las palabras con ''@'' delante de él con el estilo ''token''. (por ejemplo, @jpmcglone)
Necesito seguir funcionando con todo lo que NSAttributedString
tiene para ofrecer, pero creo que fontName
, fontSize
y color cubren la mayor parte. Espera muchas actualizaciones pronto :)
Puedo ayudarte a comenzar con esto si lo necesitas. También busco comentarios, así que si te hace la vida más fácil, diría que misión cumplida.
La pregunta ya está respondida ... pero quería mostrar cómo agregar sombras y cambiar la fuente con NSAttributedString también, para que cuando la gente busque este tema no tenga que seguir buscando.
#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 }];
Aquí está una versión Swift ...
¡Advertencia! Esto funciona para 4s.
Para 5s, tienes que cambiar todos los valores de Flotante a Valores Dobles (porque el compilador todavía no funciona correctamente)
Enumeración rápida para la elección de la fuente:
enum FontValue: Int {
case FVBold = 1 , FVCondensedBlack, FVMedium, FVHelveticaNeue, FVLight, FVCondensedBold, FVLightItalic, FVUltraLightItalic, FVUltraLight, FVBoldItalic, FVItalic
}
Matriz rápida para el acceso a la enumeración (necesaria porque la enumeración no puede usar ''-''):
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]
}
Función de texto atribuido Swift:
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
}
Primera y última extensión utilizada para encontrar rangos en una matriz de cadenas:
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]
}
}
}
nuevos colores:
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)
}
}
mi macro reemplazo:
enum MyConstants: Float {
case CornerRadius = 5.0
}
Mi fabricante de botones con texto atribuido:
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
}
Mi creador de UIView / UILabel con texto atribuido, sombra y esquinas redondeadas:
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
}
sombra genérica añadir:
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
}
ver la extensión para ver el estilo:
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)
}
}
La vista real cargó la función:
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)
}
Para resolver este tipo de problemas, creé una biblioteca en swift que se llama 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
Lo puedes encontrar aquí https://github.com/psharanda/Atributika
Puede cargar una cadena HTML
atribuida en Swift
siguiente manera
var Str = NSAttributedString(
data: htmlstring.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true),
options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil,
error: nil)
label.attributedText = Str
Para cargar un html
desde archivo
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
Y configure la cadena según su atributo requerido ... siga esto ...
http://makeapppie.com/2014/10/20/swift-swift-using-attributed-strings-in-swift/
Súper manera fácil de hacer esto.
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))
Para más detalles haga clic aquí; https://github.com/iOSTechHub/AttributedString
Siempre me pareció que trabajar con cuerdas atribuidas es un proceso increíblemente largo y tedioso.
Así que hice una aplicación para Mac que crea todo el código para ti.
https://itunes.apple.com/us/app/attributed-string-creator/id730928349?mt=12
Una solución más fácil con extensión de cadena atribuida.
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)
}
}
Prueba esto y mira (Probado en Swift 3 y 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)
Aquí está el resultado esperado:
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)
Lista de atributos, consulte aquí NSAttributedStringKey en Apple Docs
- (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];
}