2012-10-03 13 views
17

En el guión gráfico diseño un conjunto de etiquetas con varias opciones de formato.¿Cambiar el texto de un UILabel atribuido sin perder el formateo?

entonces yo:

label.text = @"Set programmatically"; 

y se pierde todo el formato! Esto funciona bien en iOS5.

Debe haber una manera de simplemente actualizar la cadena de texto sin recodificar todo el formato ?!

label.attributedText.string 

es de solo lectura.

Gracias de antemano.

Respuesta

3

Un attributeString contiene todos sus datos de formato. La etiqueta no sabe nada sobre los formatos en absoluto.

Usted podría almacenar los atributos como un diccionario y luego, cuando se cambia el attributedString puede utilizar:

[[NSAttributedString alloc] initWithString:@"" attributes:attributes range:range]; 

La única otra opción es construir los atributos de nuevo otra vez.

28

Puede extraer los atributos como un diccionario con:

NSDictionary *attributes = [(NSAttributedString *)label.attributedText attributesAtIndex:0 effectiveRange:NULL]; 

A continuación, añadir de nuevo con el nuevo texto:

label.attributedText = [[NSAttributedString alloc] initWithString:@"Some text" attributes:attributes]; 

Esto asume la etiqueta tiene texto en él, de lo contrario bloqueo, por lo que probablemente deba realizar una comprobación primero con:

if ([self.label.attributedText length]) {...} 
+0

En realidad, el IOS debe hacerlo de forma predeterminada, de todos modos tenemos nuestro camino. Gracias, su sugerencia me ayudó. –

4

Aunque es nuevo en el programa iOS ing, me encontré con el mismo problema muy rápidamente. En iOS, mi experiencia es que un problema

  1. de Lewis42 se produce constantemente sugerencia
  2. de Josef de extraer y volver a aplicar los atributos no no funcionar: Atributos se devuelve un valor nulo diccionario.

Tras mirar alrededor s/o, me encontré con This Post y siguieron a esa recomendación, que terminé usando esto:

- (NSMutableAttributedString *)SetLabelAttributes:(NSString *)input col:(UIColor *)col size:(Size)size { 

NSMutableAttributedString *labelAttributes = [[NSMutableAttributedString alloc] initWithString:input]; 

UIFont *font=[UIFont fontWithName:@"Helvetica Neue" size:size]; 

NSMutableParagraphStyle* style = [NSMutableParagraphStyle new]; 
style.alignment = NSTextAlignmentCenter; 

[labelAttributes addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, labelAttributes.length)]; 
[labelAttributes addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, labelAttributes.length)]; 
[labelAttributes addAttribute:NSForegroundColorAttributeName value:col range:NSMakeRange(0, labelAttributes.length)]; 

return labelAttributes; 
Cuestiones relacionadas