¿Cómo puedo cambiar el color a parte de un texto? (Si se puede).

Para dar las gracias debes entrar o registrarte en el foro

iMiembro
iMiembro
Mensajes: 14 Agradecido: 0
15 May 2012, 14:10# 1

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.

Gracias  
Etiquetado en:
iMiembro
iMiembro
Mensajes: 13 Agradecido: 4
06 Jun 2012, 09:39# 2

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.

Gracias  
1 persona ha dado las gracias: Kaisser74
iMiembro
iMiembro
Mensajes: 14 Agradecido: 0
06 Jun 2012, 10:11# 3
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.



Esa clase es sólo para Mac? La necesito para iOS.

Gracias!
Gracias  
iMiembro
iMiembro
Mensajes: 13 Agradecido: 4
06 Jun 2012, 11:07# 4

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:

Código: Seleccionar todo
- (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);
}


Esto has de implementarlo dentro de una clase UIView. Desde tu ViewController importarás esta vista donde quieras.

Lo he desarrollado en un proyecto de prueba, no debería darte ningún problema.

Un saludo.
Gracias  
1 persona ha dado las gracias: Kaisser74
iMiembro
iMiembro
Mensajes: 14 Agradecido: 0
06 Jun 2012, 11:20# 5

Genial!

Muchas gracias, ya te contaré si me surge algún problema más :D

Gracias  

Publicidad
Publicidad