Para dar las gracias debes entrar o registrarte en el foro
Hola a todos.
Tengo una cuestión que no sé como resolver.
Dado un texto largo, necesito ser capaz de cambiar el color a una palabra en concreto, como por ejemplo, "casa". ¿Puedo aplicar un color a esa palabra y el resto que se quede en otro color?.
En Android, con la función "span", das un rango y un color y lo hace.
Gracias, un saludo.
Hola, para poder utilizar diferentes colores en una cadena de texto tienes que utilizar la clase NSMutableAttributedString, que te permite asignar atributos a las cadenas por medio de NSForegroundColorAttributeName.
Directamente con un UILabel por ejemplo no se puede hacer.
Si buscas por ahí hay bastantes ejemplos de código.
Un saludo.
alvaritoy escribió:Hola, para poder utilizar diferentes colores en una cadena de texto tienes que utilizar la clase NSMutableAttributedString, que te permite asignar atributos a las cadenas por medio de NSForegroundColorAttributeName.
Directamente con un UILabel por ejemplo no se puede hacer.
Si buscas por ahí hay bastantes ejemplos de código.
Un saludo.
Si, perdona, la clase que te reverenciaba es de Mac. Para poder realizar estos cambios para iOS tienes que utilizar el Framework CoreText.framework
Impórtalo en tu proyecto. Luego, puedes jugar con el método siguiente: CFAttributedStringSetAttribute.
Por ejemplo, podrías hacer algo de esta forma:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
//Utilizando este método ajustamos el texto de forma correcta a la pantalla
CGAffineTransform textoAjustado = CGAffineTransformMake( 1, 0, 0, -1, 0, self.frame.size.height);
CGContextConcatCTM(context, textoAjustado);
NSString *test = @"Este es el ejemplo de texto que tendrá diferentes colores en base a las preferencias del usuarios, podrá cambiar bastante";
NSInteger _stringLength=[test length];
//Convertimos el objeto NSSTring en CFString para trabajar con el core del objeto
CFStringRef string = (__bridge CFStringRef) test;
CFMutableAttributedStringRef attrString = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0);
CFAttributedStringReplaceString (attrString,CFRangeMake(0, 0), string);
//Definimos los colores que utilizaremos en la cadena de texto
CGColorRef _verde=[UIColor greenColor].CGColor;
CGColorRef _amarillo=[UIColor yellowColor].CGColor;
//Para poder mostrar en el ejemplo los diferentes colores vamos partiendo la cadena y asignandolos por tramos
CFAttributedStringSetAttribute(attrString, CFRangeMake(0, 20),kCTForegroundColorAttributeName, _amarillo);
CFAttributedStringSetAttribute(attrString, CFRangeMake(20, 20),kCTForegroundColorAttributeName, _verde);
CFAttributedStringSetAttribute(attrString, CFRangeMake(40, 20),kCTForegroundColorAttributeName, _amarillo);
CFAttributedStringSetAttribute(attrString, CFRangeMake(60, _stringLength-60),kCTForegroundColorAttributeName, _verde);
//Las siguientes funciones son para pintar en la vista la cadena de texto
CGMutablePathRef path = CGPathCreateMutable();
CGRect bounds = CGRectMake(10.0, 10.0, 200.0, 200.0);
CGPathAddRect(path, NULL, bounds);
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attrString);
CFRelease(attrString);
CTFrameRef marco = CTFramesetterCreateFrame(framesetter,CFRangeMake(0, 0), path, NULL);
CFRelease(framesetter);
CTFrameDraw(marco, context);
}
Genial!
Muchas gracias, ya te contaré si me surge algún problema más